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

Google or AdMax Promotion(page)

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」でもどちらでもいいと言えます。

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

 


公開日:

*本ページ内に記載されされた各社ブランド、サービス名、商標、登録商標については、
各社ブランドのロゴや商標等に関する帰属についてをご確認ください


最後までお読みいただきありがとうございました。
アルゴリズン

役に立ったと思っていただけたら、以下からシェア頂けたら幸いです^^

QRコードからもこのURLを開けます。

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

アイキャッチ画像に利用させて頂いております、各社ブランドのロゴやシンボルに関しては、
各社ブランドのロゴや商標等に関する帰属についてをご確認頂けますようお願い致します。
ロゴの使用等に関する苦情・ご意見等がございましたら管理者までご連絡ください。

Rakuten Promotion