美的理由から(URLとページの間に厳密な1対1のマッピングがある場合が好きです)、 http://www.example.com/index.html という事実は好きではありません。および http://www.example.com/ 2つの異なるURLで同じコンテンツを生成します。正規のものとして http://www.example.com/ が欲しいです。
明らかな解決策:
Redirect permanent /index.html /
間違っています(無限ループ)。
より良い解決策?意外と難しいようです。
PPの応答に触発された私の解決策(これはうまくいくようですので、私はそれを受け入れました)は次のとおりです。
RewriteEngine on RewriteCond%{REQUEST_URI} ^ \/index\.html $ RewriteRule。* http://www.example.com/ [R = 302、L]
Modrewrite以外のソリューションはありますか?新しいApacheモジュールをアクティブ化する必要がありましたが、これは避けようとしています。
mod_rewrite からRewriteCond
を試してください:
RewriteEngine On
RewriteCond %{QUERY_STRING} !^/$
RewriteRule /index.html / [R]
これは、クエリ文字列がnot/
の場合、/index.html
を/
に書き換えます(ループしないでください)。
Mod_rewrite以外のソリューション…実際、joschiはほぼそれを持っていましたが、いくつかの(私にはわかりませんが)理由で、無限のループを回避する必要があります。
RedirectMatch permanent ^/index\.html$ http://www.example.com/
AliasMatch ^/$ /var/www/index.html
RedirectMatch ^/index.html$ http://www.example.com/
DirectoryIndexを別の名前(unpredictable.htmlなど)に設定し、インデックスファイルに同様の名前を付けてみませんか?
DirectoryIndex unpredictable.html
Redirect permanent /index.html http://yoursite/
選択したDirectoryIndex値を公開する必要はありません。
リダイレクトの最後の引数は、パスフラグメントだけでなく、完全なURLである必要があることに注意してください。
RewriteEngine on
RewriteCond %{REQUEST_URI} ^\/index\.html$
RewriteRule .* http://www.example.com/ [R=302,L]
完璧なソリューション