| ブログトップ | サーバー関連 |

RewriteCond %{REQUEST_FILENAME}の衝撃

htaccessで「RewriteEngine on」にしたときよく
 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
 
て言う記述をつけることがあります。
これは、実際にファイル(-f)やフォルダ(-d)がある場合は、リライトルールを適用しないという意味ですが、何か効いてない。
これまで特に運営上問題がなかったので放置してたんですが、ぼちぼちと問題が発生し始めまして、なんとかしなきゃなぁと思っていたところ、このような記事を発見!
 
どうやら
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
の直後に書いてあるルールしか無効にできないらしい。
 
つまり
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^news\.html$ news.php [L]
RewriteRule ^event\.html$ event.php [L]
RewriteRule ^list\.html$ list.php [L]
RewriteRule ^(.*).html$ index.php?name=$1 [L]
と書かれている場合、newsには影響を与えても、それ以下には影響を与えないというわけです。
 
どうりで効いてないはずだ。
そもそも記述場所が間違ってるんだもんね~。
RewriteRule ^(.*).html$ index.php?name=$1 [L]
の部分だけ影響を与えればいいので
RewriteRule ^news\.html$ news.php [L]
RewriteRule ^event\.html$ event.php [L]
RewriteRule ^list\.html$ list.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*).html$ index.php?name=$1 [L]
とすれば解決!
 
なんだかなぁ・・・

このエントリーをはてなブックマークに追加

LINEで送る

nandani | 2010年07月18日 | コメント(1) | トラックバック(0) | サーバー関連

トラックバック

トラックバックURL

コメント一覧

1. Posted by yu   2017年06月26日

[L]と書くと、Rewriteは既に終了してしまうので、その後なに書いても効かないわけです。
RewriteCond で再度定義しなければ、条件なしとなります。
基本の部分をきちんとみるのは重要です。
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
[L] last(last rule)
Rewrite機能によるURL変換を終了します。
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

コメントする

※メールアドレスが公開されることはありません。

名前 *
メール*
URL
Copyright(c) 2010 - 2017 ダリの雑記