人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

mod_rewriteの質問です。「RewriteCond %{REQUEST_FILENAME} !-f」と記述すると、存在するファイルだったらルールを適用しないという意味かと思いますが、以下の設定をして、http://abc.def/abc/def.jpgにアクセスすると、/var/www/html/abc/def.jpgが存在しても、リダイレクトされます。これはなぜでしょうか?

DocumentRoot /var/www/html/

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/abc/def.jpg$ http://abc.def [R]

●質問者: cbic
●カテゴリ:ウェブ制作
✍キーワード:.jpg ABC def HTML mod_rewrite
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● pahoo
●0ポイント

「RewriteCond %{REQUEST_FILENAME} !-f」と記述すると、存在するファイルだったらルールを適用しない

この前提が間違っているようです。


! は文字列の前に付けることで否定の意味を示します。オプション -f を否定することはできません。

おそらく、この式は -f が有効になり、常に true を返す結果になるでしょう。


参考サイト

◎質問者からの返答

ほんとですか???http://net-newbie.com/trans/mod_rewrite.html#RewriteCondに「以上すべてのテストについて、 エクスクラメーションマーク ('!') を前に置くことにより それらの意味を否定することができます。」とありますが・・・


2 ● kn1967
●30ポイント

的確な解決策が無く、コメント欄も締め切っておられるので静観しておりましたが・・・


apacheのドキュメントにもある方式ですし ! の位置に間違いはありません。

Apache 1.3 URL Rewriting Guide


では、なぜ動かないのか・・・?


それでは

RewriteCond %{REQUEST_FILENAME} !-f

にファイル名を入れて見ましょう。


http://abc.def/abc/def.jpg であればファイル名はdef.jpgなので

RewriteCond def.jpg !-f

となります。

ディレクトリに関しては記述されていないので

ファイルを探す基点は /abc ではなく / になります。


つまり

http://abc.def/def.jpg

が存在するかどうかを判断基準としているので・・・


対処としてはパスを明確にするか、各サブディレクトリ毎に対応するように

RewriteCond を書き換えれば良いという話になるのですが

それについてよい方法が見当たらないので静観しておりました。


とりあえず原因までで、申し訳無いのですが!の位置などではなく

記述に足りない部分があるという点お知らせいたしたく、回答とさせていただきました。


※コメント欄空けておいていただけると、この程度のことは即時伝わりますし

解答欄を汚す事もありませんので、お勧めしておきます。

◎質問者からの返答

なるほど。少しためして、また結果報告させて頂きます。

色々と試して見ました。

?def.jpgを/var/www/html/def.jpgにコピーする → 症状変わらず

?RewriteBaseを設定する → できないapache再起動でエラー(RewriteBase: only valid in per-directory config files)

引き続き検討してみます。


3 ● rouge_2008
●100ポイント ベストアンサー

VirtualHostディレクティブに記述しているのでしょうか?

私の環境でも同じですので、おそらく仕様なのではないかと思います。

以下の方法で対処している人もいるようです。

http://developer.ti-da.net/e2371733.html

以下の記事の人は、%{DOCUMENT_ROOT}/を%{REQUEST_FILENAME}の前に記述して対処しているようです。

http://underrails.seesaa.net/article/58225749.html

※私は上記どちらの方法でも可能でした。

◎質問者からの返答

どんぴしゃです!!!!!VirtualHostです!できました!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ