頑張らない!でも諦めない!必死にならずにええかげん

RewriteRuleで$0変数の利用(ルート・サブディレクトリ差異)

一般的にmod_rewriteを利用してRewriteRuleに記載するパターンとして、
「RewriteRule ^(.*)$…$1」の組み合わせが利用されます。
しかし変数化の必要もなく「$0」が利用できるとのことなので検証します。
結果、$0でも問題なく要求パスの置換URL側への挿入が可能です。

 

RewriteRuleで$0変数の利用

「$0」確かにどこかでみかけたような記憶はあるのですが、
紹介されている大半が「RewriteRule ^(.*)$…$1」と$1が利用されています。

ここでは、$0が利用できることを確認します。

 

サブディレクトリ配下の場合

http://q-modrewrite.trce.info/dollar0/.htaccess には以下のように記述しています。

 

RewriteRule .* http://redirect.trce.info/$0 [R=302,L]

 

上記のとおり「(.*)」ではなく「.*」として記述していますので、
要求URLの変数化を行っていません。

 

実際のアクセス確認

以下のサブディレクトリにアクセスし、
要求パスが転送先に引き継がれるかを確認します。

http://q-modrewrite.trce.info/dollar0/dollar0_subdir/

転送先 ⇒ http://redirect.trce.info/dollar0_subdir/

http://q-modrewrite.trce.info/dollar0/

転送先 ⇒ http://redirect.trce.info/

 

しっかり、要求パス部分が引き継がれて転送されています。

が、要求パスは本来「/dollar0/dollar0_subdir/」であったはずです。
しかし、引き継がれているパスは「/dollar0_subdir/」部分のみになっています。

.htaccessは「http://q-modrewrite.trce.info/dollar0/.htaccess」に対して、
配置していますので、この場合.htaccessの配置された
ディレクトリ配下のサブディレクトリパスのみが引き継がれます。

この形の場合、冒頭のスラッシュ「/」が付いてこないんですね・・・。

 

.htaccessは最下層ディレクトリのものが利用されますので、
配置されたディレクトリよりも上のディレクトリ情報は
一切見ていないということなのかもしれません。

この要求パスの戻り値って、常識なんだろうか・・・。
今まで気づいてなかったけど。

 

ちなみに、一般的な記述「(.*)….$1」でも同じ結果が得られます。

http://q-modrewrite.trce.info/dollar1/dollar1_subdir/

転送先 ⇒ http://redirect.trce.info/dollar1_subdir/

http://q-modrewrite.trce.info/dollar1/

転送先 ⇒ http://redirect.trce.info/

 

挙動が気持ち悪かったので、ルートでも試しときます。

 

ルートディレクトリの場合

ドメインルートに配置した.htaccessでの挙動を検証します。

配置している.htaccessは同じです。

http://dollar0-val.trce.info/.htaccess

 

実際のアクセス確認

以下のサブディレクトリにアクセスし、
要求パスが転送先に引き継がれるかを確認します。

http://dollar0-val.trce.info/

転送先 ⇒ http://redirect.trce.info/

 

http://dollar0-val.trce.info/dollar0/

転送先 ⇒ http://redirect.trce.info/dollar0/

 

http://dollar0-val.trce.info/dollar0_subdir/

転送先 ⇒ http://redirect.trce.info/dollar0_subdir/

 

http://dollar0-val.trce.info/dollar0/dollar0_subdir/

転送先 ⇒ http://redirect.trce.info/dollar0/dollar0_subdir/

 

サブディレクトリの時と挙動は全く同じと言えます。

しかし、ドメインルートなどに配置した場合、
配置した場所が「/」で上位ディレクトリもないことから、

この上位ディレクトリ部分が要求パスに含まれてこないことには

気づかないよなと感じますね。

 

プロモーション(btm)

Google or AdMax Promotion (it)

さいごに

こうして$0が利用できることが分かれば、

「(.*)   $1」でも「.*   $0」でもどちらでもいいと言えます。

なんとなく、(.*)のようにおまじないで書いちゃう気もしますが。

 


公開日:

最後までお読みいただきありがとうございました。

ページ
すべて展開 | すべて省略

Rakuten Promotion

ブログ記事のご紹介
すべて展開 | すべて省略