htaccessで動的URLなどを別のURLに書き換える場合に、アクセスしたURLをそのままにして表示だけを切り替える方法メモです。
ブラウザURLを転送させてしまうと話が変わってしまうので、アクセスしてきたURLはそのまま表示させておいて、中身だけをRewriteさせる方法です。
SEOの観点からもリダイレクトよりも書き換えの方が良い場合が多いので、便利に活用していきたいですね。
目次
URLそのままのRewriteRule書き換え
表示URLをそのままに、URLの書き換えを行う時に以下の項目を確認してみましょう。
サーバーの設定によって動きが多少異なるので、注意しましょう。
RewriteとRedirectの違いは?
RewriteはURLの書き換えが発生しません。RedirectはURLの書き換えが発生します。SEO的な面でもまったく別の解釈になりますので、使い分ける場面を見極めて活用していきましょう。
RewriteでURL書き換え
では早速URLを書き換えてみます。
RewriteEngine on
RewriteRule ^hoge\.html$ view.html [L]
hoge.htmlへのアクセスはview.htmlが表示されますよっていう事です。
正規表現でRewriteRule
正規表現の括弧でグルーピングをして$1で後方参照してみましょう。
RewriteEngine on
RewriteRule ^/access/(.*)$ /rewrite/$1
さて、こうするとどうなるでしょう。
「/access/」以下へのアクセスは「/rewrite/」の中身が表示されます。外部的なURLを統一できたりと使い道も広いですね。
RewriteRuleに合わせて使える小技
1.RewriteRule xxx – [L]
フラグの前に – を付ける方法です。このハイフンはそのまま置換前のURLを代用しますよーという演算子です。つまり置換しないってことですね。
2.RewriteRule xxx [PT]
[PT]フラグを利用する方法です。URL書き換えの後に別のモジュールに繋ぎます。
書き換えURLに対して、Aliasディレクティブ、ScriptAliasディレクティブ、Redirectディレクティブなどを利用する場合に指定します。
3.RewriteRule xxx$ http://xxx.xxx [L]
このように書き換え先が絶対パスはNGになります。なぜならリライトでなくリダイレクトになってしまいます。レスポンスコードとしては302扱いになるようです。
4.RewriteRule xxx [L,QSA]
[QSA]フラグはクエリを引き継ぐことができるフラグです。「?id=hoge」をそのままで書き換えられるということですね。
まとめ
RewriteRuleはまだまだ色々なことができます。それ故に、これだ!という記述を学ぶにはちょっと難しさを感じることがあると思います。
それは実際に挙動を試しにくい設定だからだと思います。
フラグなどにしても、使ってみるとどうなるのか試してみるだけでも楽しめる幅は広がっていくと思いました。
今日も知識欲は止まらない。