web-dev-qa-db-ja.com

http://www.example.com/index.htmlをhttp://www.example.com/にリダイレクトする(ループなし)

美的理由から(URLとページの間に厳密な1対1のマッピングがある場合が好きです)、 http://www.example.com/index.html という事実は好きではありません。および http://www.example.com/ 2つの異なるURLで同じコンテンツを生成します。正規のものとして http://www.example.com/ が欲しいです。

明らかな解決策:

Redirect permanent /index.html /

間違っています(無限ループ)。

より良い解決策?意外と難しいようです。

4
bortzmeyer

PPの応答に触発された私の解決策(これはうまくいくようですので、私はそれを受け入れました)は次のとおりです。

 RewriteEngine on 
 RewriteCond%{REQUEST_URI} ^ \/index\.html $ 
 RewriteRule。* http://www.example.com/ [R = 302、L] 

Modrewrite以外のソリューションはありますか?新しいApacheモジュールをアクティブ化する必要がありましたが、これは避けようとしています。

2
bortzmeyer

mod_rewrite からRewriteCondを試してください:

RewriteEngine On
RewriteCond %{QUERY_STRING} !^/$
RewriteRule /index.html / [R]

これは、クエリ文字列がnot/の場合、/index.html/に書き換えます(ループしないでください)。

2
PP.

Mod_rewrite以外のソリューション…実際、joschiはほぼそれを持っていましたが、いくつかの(私にはわかりませんが)理由で、無限のループを回避する必要があります。

RedirectMatch permanent ^/index\.html$ http://www.example.com/
AliasMatch ^/$ /var/www/index.html
1
kmkaplan

RedirectMatch ^/index.html$ http://www.example.com/

1
joschi

DirectoryIndexを別の名前(unpredictable.htmlなど)に設定し、インデックスファイルに同様の名前を付けてみませんか?

DirectoryIndex unpredictable.html
Redirect permanent /index.html http://yoursite/

選択したDirectoryIndex値を公開する必要はありません。

リダイレクトの最後の引数は、パスフラグメントだけでなく、完全なURLである必要があることに注意してください。

1
jmtd
RewriteEngine on
RewriteCond %{REQUEST_URI} ^\/index\.html$
RewriteRule .* http://www.example.com/ [R=302,L]

完璧なソリューション

0
Dev Maurya