2012-04-20 16 views
7

残念ながら、すべてのURLには.htmlという接尾辞が付いています。Magentoのインストールでは、これをCMSで変更できますが、残念ながら.htmlという接尾辞Googleで良いランキングを持っている。非.htmlにリダイレクトする必要があります。リダイレクトURLから.htmlを削除します

したがって、このサイトを一から再構築しているため、新しいサイトには同じURLがありますが、拡張子は.htmlではありません。今

  • です:www.example.de/cool-shoes.html
  • は次のようになります。www.example.de/cool-shoes

のでwww.example.de/cool-shoes.htmlはもはや存在しないだろう、と私は運での.htaccessでリダイレクトをしようとしてきました。

私がこれまで試した:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/ 
RewriteRule (.*)index\.html$ /$1 [R=301,L] 

をして:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 

が、動作するように...任意のアイデア思えないのですか?

答えて

8

ので、いくつかの研究の後、および書き換えルールでこれを達成するために失敗し、次のコード行が働いOK:

redirectMatch 301 ^(.*)\.html $1 

これがうまくいけば、任意のURLの拡張子を削除して、壊れたリンクを避けるために非常に便利です将来誰かを助ける...

歓声!

+0

こんにちは、ちょうど私の疑いをクリアするために、このルールは何をしていますか?最初のパラメータがリクエストから受け取る式であり、2番目のパラメータがApacheに送信する式であることは納得されていませんか?それらを切り替える必要があります - > ^(。*)$ 1.html – alexserver

+0

このルールは '.html'を削除しています。最初の部分は一致している部分です: '.html'を持つURL。 '$ 1'はマッチの括弧内にあるもので、' .html'以外のものです。 –

+0

'.html'がURLの最後に来るように' $ 'を追加します:' redirectMatch 301 ^(。*)\。html $ $ 1' –

1

これはトリックを行う必要があります。

RewriteEngine On 
RewriteRule ^(\w+)\.html$ /$1 [R=301,L] 
+0

ありがとうございますが、何も変わっていないようですが、私はちょうどmagento CMSのプレフィックスを削除することができますが、さよならグーグルランク... "w +"は何ですか? [R = 301、NC]または何かを使用する必要がありますか? –

+0

これは、.html(\ w +が英数字以外の文字列と一致する)で終わるリクエストを受け取り、同じアドレスに.htmlをリダイレクトします。私はあなたが何かをしたいと仮定しています、そしてVikasの解決策はきちんとしたもののようです。 –

+0

私はあなたが正しい方法を行っていると思います.Vikasの解決策は良いですが、上記のようにURLが存在するこのURL(.html)は削除され、誰もが.htmlのない新しいURLにリダイレクトされるようにします。私はメインの.htaccessを編集し、あなたが正しい場所に提案した行を追加しましたが、リダイレクトは行われませんでした。おそらく、この行をmagentoインストール全体の.htacessファイルに追加することで間違っています。この店のための別の.htacess(私はマルチショップのインストールがあります)ありがとう! –

1

stepsに従って、あなたは.htaccessファイルを変更することなく、URLからの.htmlを削除することができます。

+0

ありがとうございます。実際には、あなたのページの前に.htmlというサフィックスがあった場合にのみ動作しますが、この場合は、このページは.htmlが存在しません。古いサイトには存在しますが、新しいサイトには存在しません。古いulr(www.mysite.de/thing.html)がwww.mysite.de/thingにリダイレクトされるたびに、404 Not見つかりました。私はこれがhtaccessで実現できると思いますよね? –

+0

リンクのみの回答は高品質ではありません。リンクされたコンテンツが変更されたり、利用できなくなったりする可能性があります。また、ユーザーが回答をクリックするようにするのはユーザーフレンドリーではありません。ここでの手順を少なくとも要約する方がよいでしょう。 –

0

これはこの意志あなた

8

に役立つかもしれない www.mysite.de/cool-shoes 永久www.mysite.de/cool-shoes.htmlをリダイレクトあなたの.htaccessファイル に置くにこれを試してみてください>http://example.com/page

# Remove .html from url 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 
+0

このコードは '.html'を削除しないように見えますそれ。また、リダイレクトルールではなく、リダイレクトルールであるように見えます。リダイレクトを行うには最後に '[R = 301、L]'が必要です。 –

2

を増やしてみてください.html拡張子にURLをリダイレクトし、それを削除し、あなたのサイトのルートディレクトリに.htaccessファイルに次の - そうhttp://example.com/page.htmlのようなURLを書き換えます。

Options +FollowSymLinks -MultiViews 
DirectorySlash Off 

RewriteEngine On 

RewriteCond %{SCRIPT_FILENAME}/ -d 
RewriteCond %{SCRIPT_FILENAME}.html !-f 
RewriteRule [^/]$ %{REQUEST_URI}/ [R=301,L] 

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteRule ^(.+)\.html$ /$1 [R=301,L] 

RewriteCond %{SCRIPT_FILENAME}.html -f 
RewriteRule [^/]$ %{REQUEST_URI}.html [QSA,L] 
1

ここで私のために働いた解決策があります。

RewriteCond %{THE_REQUEST} \.html [NC] 
    RewriteRule ^(.*)\.html$ /$1 [R=301,L] 

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME}\.html -f 
    RewriteRule ^(.*)$ $1.html [L] 
+0

これらのルールは、サーバーが '.html'で終わるファイルを実際に持っているのにURLに' .html'を表示したくない場合に適しています。 –

0

これは、index.phpのが隠されているの.html /product/raspberrypi.html ---> /製品/ raspberrypi /(/product/raspberrypi/index.php)で終わるURLのです。私はこれを理解するためにしばらく私を取った。笑...

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_URI} \.html$ 
RewriteRule ^(.*)\.html$ $1 [R=301,L] 

RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

あなたは「REQUEST_URI」を使用しています。また、アプリケーションによって上書きされる可能性があるので、インデックスリダイレクトルールの前にそれを追加する必要があります。ファイル名にはすべてルートフォルダ(Wordpress)のindex.phpがあるため、リダイレクトしようとしているファイル名やディレクトリではなく、そのURIがURIであることを知っておくことが重要です。

関連する問題