RewriteモジュールでURLを書き換える方法
RewriteモジュールでURLを書き換える方法をメモしておきたいと思います。.htaccessでRewriteモジュールを使用すればアクセスしたURLとは別のURLに自動的に飛ばすことができます。サイトを移転した際など、異なるURLからのアクセスが必要な時に役立ちそうです。
今回は、http://www.testsite.com/oldurl/index?id=(num)
にアクセスした際に、http://www.testsite.com/newurl/index?id=(num)
へidも継承して移動するようにしたいと思います。
.htaccessの変更
.htaccessファイルに下記を記入します。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} oldurl/index
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$
RewriteRule ^(.*)$ /newurl/index\?$2 [R=301,L]
</IfModule>
<IfModule mod_rewrite.c>~%lt;/IfModule>
自動的に別のURLに飛ばすために、.htaccessのmod_rewriteという機能を利用します。
RewriteEngine on
mod_rewriteによるURLの書き換えを有効にするために、RewriteEngine on
を記述します。
RewriteBaseは書き換えのベースとなるパスを指定するディレクティブです。ベースパスが自明である場合は記述を省くことができます。
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$
RewriteCondで、環境変数やその他の条件に応じた判定を付加します。条件にマッチした場合のみ、次に記述されたRewriteRuleが適応されます。
QUERY_STRING
にある^id=([0-9]+)$
でidを取得します。
^
は文字列の先頭、$
は文字列の最後を指します。[0-9]+
は0~9の数字の集合体を指します。
RewriteRule ^(.*)$ /newurl/index\?$2 [R=301,L]
URLの書き換えを行います。RewriteCondでマッチした場合、/newurl/index\?$2
にURLを書き換えます。
$2
には、取得したidが記述されます。
R=301
は、ステータスコード301でリダイレクトする機能です。
ステータスコード301は、サイトが移転したことを意味します。
L
は、条件にマッチした場合そこで判定を終了する機能です。
これで、http://www.testsite.com/oldurl/index?id=42
を開こうとしたとき、http://www.testsite.com/newurl/index?id=42
へidもそのまま自動的にアクセスできるようになりました。