スポンサードリンク

【mod_rewrite】URLの正規化(wwwのありなし、index.htmlのありなし)

mod_rewriteを利用して「www」のありなし、「index.html」のありなしを統一する、いわゆるURL正規化の方法を説明します。

スポンサードリンク

wwwなしに正規化

一般的に、「http://○○○.com/~」と「http://www.○○○.com/~」でアクセスした場合、どちらとも同じファイルが表示されます。

(今はどうなのかわかりませんが)SEOの関係上どちらかに統一した方がよいと言われているのでwwwなしに正規化したいと思います。

方法は.htaccessに以下を記述するだけです。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.○○○\.com$
RewriteRule ^(.*)$ http://○○○.com/$1 [R=301,L]

この詳細の解説は、RewriteCondを読んでください。

index.htmlなしに正規化

「http://○○○.com/」と「http://○○○.com/index.html」でアクセスした場合、どちらともルートディレクトリの「index.html」が表示されます。

これもどちらかに統一したほうがよいと言われている(言われていた)ので、index.htmlなしに正規化したいと思います。

RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://○○○.com/$1 [R=301,L]

解説

「http://○○○.com/index.html」でアクセスがあった場合、サーバ変数「%{THE_REQUEST}」には「GET /index.html HTTP/1.1」みたいなものが渡り、これはRewriteCondの条件パターンにマッチするので、RewriteRuleが実行されます。

すなわち、RewriteRuleのパターン「^(.*)index.html$」には「index.html」が渡り、置換が行われて「http://○○○.com/」になります。

同様に、「http://○○○.com/hoge/index.html」でアクセスがあった場合、RewriteRuleのパターン「^(.*)index.html$」には「hoge/index.html」が渡り、置換が行われて「http://○○○.com/hoge」になります。

なお、「R=301」や「L」などの記号の意味については、フラグ正規表現を参照して下さい。


Warning: count(): Parameter must be an array or an object that implements Countable in /home/yskymk/www/000web/ysklog/mod-rewrite/wp-includes/class-wp-comment-query.php on line 405

コメント

まだコメントはありません。

コメントフォーム
お名前
コメント