URLの簡略化(mod_rewrite)について
概要
mod_rewriteはApacheモジュールの一つで、アクセスURLを正規表現で書き換えることができます。mod_rewriteを利用しない状態だと、freoにアクセスするためのURLは
http://www.example.com/index.php/view/5
http://www.example.com/index.php/login
このようなURLになります。ですがmod_rewriteを利用すると
http://www.example.com/view/5
http://www.example.com/login
このようなURLでアクセスできるようになります。URLがスッキリして判りやすくなり、SEO対策にもなります。ただし、mod_rewriteが利用できるサーバーであることが必須条件です。mod_rewrite未対応のサーバーではこの機能は利用できません。
広告
詳細
mod_rewriteに対応させる場合、freo/config.php
をエディタで開き、基本設定の「mod_rewriteへの対応」を true
に設定します。
さらに、以下のファイルを解凍して作成される .htaccess
を index.php
と同じディレクトリ内にアップロードします。(既に .htaccess
を使用している場合、以下のファイルの内容を追記してください。)
.htaccess
内には、URLを書き換えるコードが書かれています。書かれている内容は以下のとおりです。
DirectoryIndex index.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php/$1
</IfModule>
これで、freoにアクセスできるURLが変わります。
mod_rewriteを利用できるサーバーなのに正しく動作しない場合、.htaccess
内にある
RewriteRule (.*) index.php/$1
という部分を以下のように変更してみてください。
RewriteRule (.*)$ index.php?pathinfo=$1&%{QUERY_STRING}
アドレスバーに表示されるURLを統一する
例えば http://www.example.com/
にfreoを設置してmod_rewriteを設定した場合、
http://www.example.com/
http://example.com/
http://www.example.com/index.php
http://example.com/index.php
このようなURLでトップページが、
http://www.example.com/page/about
http://example.com/page/about
http://www.example.com/index.php/page/about
http://example.com/index.php/page/about
このようなURLでaboutページが表示されます。ですがmod_rewriteを使用すれば、例えばそれぞれ一番上のURLに統一することができます。(つまり、http://example.com/index.php/page/about
にアクセスしても即座に http://www.example.com/page/about
へリダイレクトされます。)
このような動作にする場合、.htaccess
に書いた <IfModule mod_rewrite.c>
~ </IfModule>
部分を、一例ですが以下のように修正します。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L,NE]
RewriteCond %{THE_REQUEST} ^GET\ .*/index.php
RewriteRule ^(.*)index.php/?(.*)$ http://www.example.com/$1$2 [R=301,L,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php/$1 [L]
</IfModule>
3箇所ある example.com
というドメインは、自分のサイトに合わせて書き換えてください。これで「www
あり。index.php
なし。」に統一されます。また、上の修正の代わりに
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.com
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L,NE]
RewriteCond %{THE_REQUEST} ^GET\ .*/index.php
RewriteRule ^(.*)index.php/?(.*)$ http://example.com/$1$2 [R=301,L,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php/$1 [L]
</IfModule>
とすると「www
なし。index.php
なし。」に統一されます。
なお、mod_rewriteでの変更内容が反映されない場合、ブラウザのキャッシュを削除して再度アクセスしてください。(ページの再読み込みだけでは、すぐに反映されない事があります。)