- 締切済み
mod_rewriteについて
mod_rewriteの質問です。 RewriteEngine on RewriteCond %{TIME_DAY}.html -s RewriteRule index.html test.php RewriteRule index.html %{TIME_DAY}.html と記述しているのですが、 %{TIME_DAY}.html が存在するのに、 RewriteCond部分でないと判定され、 %{TIME_DAY}.html が読まれてしまいます。 RewriteCond部分の条件部分の記述方法が間違っているのでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10358)
すいません。#1の回答は間違い。 RewriteCondは直後のRewriteRuleにしか効かないようですね。ドキュメントと違うのですが、バージョンの違いなのでしょうか。 RewriteCond のファイル名はフルパスが必要なようです。 RewriteCond /home/xxxx/www/%{TIME_DAY}.html -s のような実際のフルパスにしてみてください。
- notnot
- ベストアンサー率47% (4900/10358)
どういうことをしたいのでしょうか? if( %{TIME_DAY}.html が存在してサイズが非0 ) { index.html を test.php に書き換え index.html を %{TIME_DAY}.html に書き換え } なので、条件が成立する場合は、index.html が test.php に書き換えられるはずです。
補足
よく見ると条件が逆でした・・・ RewriteEngine on RewriteCond %{TIME_DAY}.html -s RewriteRule index.html %{TIME_DAY}.html RewriteRule index.html test.php 今日の日付のファイルが存在したときには、 index.html を 今日の日付のファイル に書き換え、 ないときは、つまり今日始めてのアクセスのときは、 test.php で今日の日付のファイルを生成しようとしています。 RewriteEngine on RewriteCond %{TIME_DAY}.html -s RewriteRule index.html test.php RewriteRule index.html %{TIME_DAY}.html という感じで、条件式を入れ替えても、 条件式でFalse判定になってしまい、 %{TIME_DAY}.html に書き換えられます。 (つまり今日の日付ファイルは存在する) こんな感じです。
お礼
なるほど、フルパスでうまくできました! バージョン違いかどうかは分かりませんが、 RewriteCondは、直後のRewriteRule、その次のRewriteRuleも効きますね。 ありがとうございました!