RewriteCondの話 [cakePHP]
はまったので覚え書き
cakePHPにて、インストールディレクトリ(cakePHPにおけるルートディレクトリ)には.htaccessがありまして、
その中身はというと
のようになってます。
話は変わり、同じインストールディレクトリにフォルダを作って、cakePHPに関係ないhtmlやその他のフレームワークを入れたい場合なんてある訳で。。。
例えば、WordPressを「blog」フォルダにぶち込んで動かすなど。
これはつまり、
http://?????.com/***/
で、cakePHPの”***_controller”呼び出して、
http://?????.com/blog/
としたら「blog」フォルダ内に飛ばしたいって訳ですわ。
そんなとき、最初に書いた.htaccessにちょいと書き加える訳で、
こんな感じで「RewriteCond」ルールに条件を付ければOK。
ちなみに、「!」は否定、「^」は先頭、「.*」は任意の文字の繰り返し、を表す。
正規表現に関して詳しくはGoogle先生に聞いてほしいw
この場合は「REQUEST_URIが”/blog/〜(*ワイルドカード)〜”の様なかたちではなかったら」下行のルールを適用という感じ。
で、話はここから。
以前cakePHPを載せたサーバでは上記の方法でちゃんと動いてたんですが、
今回載せるサーバでは、上記では「REQUEST_URIが”/blog/〜〜〜”の様なかたちではなかったら」という条件文として扱われない!
なんでだろ???
かなりいろいろ試して、頭が混乱して、このまま条件が付けられなかったらどうしよ〜〜、となってきた頃
先頭を表す「^」を削除したら出来ました。
つまり、
こんな感じ
解決はしたけど、理由はわからず。
サーバによって、正規表現の解釈が違うのか?はたまた、「REQUEST_URI」で返される値に若干の違いがあるのか?(この場合先頭に何かよけいな文字列が付くとか?)
後者のがあり得そうだが、原因の究明は出来ませんでした。
とにかくハマったのでメモメモ。(T_T)
わかる人が通りすがりに何か教えてくれたら有り難し。
ちなみにソースコードをブログにのせるための変換に
ブログでのソースコード表示
こちらのページを利用させていただきました。便利っす!ありがとうございます。
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)
わかる人が通りすがりに何か教えてくれたら有り難し。
ちなみにソースコードをブログにのせるための変換に
ブログでのソースコード表示
こちらのページを利用させていただきました。便利っす!ありがとうございます。
私も
RewriteCond %{REQUEST_URI} !^/admin_(master|agency|shop)
↓機能しなかったため下記に変更
RewriteCond %{REQUEST_URI} !/admin_(master|agency|shop)
これにより稼働しました。^が何故ダメなのか疑問のままです。
by VHS天国 (2015-12-21 15:53)