SSブログ

RewriteCondの話 [cakePHP]

はまったので覚え書き

cakePHPにて、インストールディレクトリ(cakePHPにおけるルートディレクトリ)には.htaccessがありまして、
その中身はというと

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>


のようになってます。



話は変わり、同じインストールディレクトリにフォルダを作って、cakePHPに関係ないhtmlやその他のフレームワークを入れたい場合なんてある訳で。。。
例えば、WordPressを「blog」フォルダにぶち込んで動かすなど。

これはつまり、

http://?????.com/***/

で、cakePHPの”***_controller”呼び出して、

http://?????.com/blog/

としたら「blog」フォルダ内に飛ばしたいって訳ですわ。



そんなとき、最初に書いた.htaccessにちょいと書き加える訳で、

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ app/webroot/ [L]
RewriteCond %{REQUEST_URI} !^/blog/.*
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>


こんな感じで「RewriteCond」ルールに条件を付ければOK。

ちなみに、「!」は否定、「^」は先頭、「.*」は任意の文字の繰り返し、を表す。
正規表現に関して詳しくはGoogle先生に聞いてほしいw

この場合は「REQUEST_URIが”/blog/〜(*ワイルドカード)〜”の様なかたちではなかったら」下行のルールを適用という感じ。





で、話はここから。

以前cakePHPを載せたサーバでは上記の方法でちゃんと動いてたんですが、
今回載せるサーバでは、上記では「REQUEST_URIが”/blog/〜〜〜”の様なかたちではなかったら」という条件文として扱われない!
なんでだろ???

かなりいろいろ試して、頭が混乱して、このまま条件が付けられなかったらどうしよ〜〜、となってきた頃

先頭を表す「^」を削除したら出来ました。

つまり、
RewriteCond %{REQUEST_URI} !/blog/.* 

こんな感じ


解決はしたけど、理由はわからず。
サーバによって、正規表現の解釈が違うのか?はたまた、「REQUEST_URI」で返される値に若干の違いがあるのか?(この場合先頭に何かよけいな文字列が付くとか?)

後者のがあり得そうだが、原因の究明は出来ませんでした。


とにかくハマったのでメモメモ。(T_T)
わかる人が通りすがりに何か教えてくれたら有り難し。



ちなみにソースコードをブログにのせるための変換に
ブログでのソースコード表示
こちらのページを利用させていただきました。便利っす!ありがとうございます。

nice!(0)  コメント(1)  トラックバック(1) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 1

VHS天国

私も
RewriteCond %{REQUEST_URI} !^/admin_(master|agency|shop)

↓機能しなかったため下記に変更

RewriteCond %{REQUEST_URI} !/admin_(master|agency|shop)

これにより稼働しました。^が何故ダメなのか疑問のままです。
by VHS天国 (2015-12-21 15:53) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 1

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。