2012-03-13 19 views
0

ここで私が何をしようとしています何であるかどうかに基づいて、.htaccessを介してすべてのURLやファイルの要求をリダイレクトする:ファイルが存在するかどうか

  • ファイルがファイルシステムから要求され、それが存在しない場合は、URLを書き換えますファイルが要求され、それがファイルシステムに存在しない場合、
  • を/index.php?404
  • を/index.php?dataするURLを書き換え、他のすべてのケースで
  • を/index.php?fileするURLを書き換えます

しかし、私は50結果として0のエラーは、誰が問題があるかもしれないか知っていますか?私は過去にRewriteEngineを使用しましたが、このような特別なケースではどのように使用するかについてはまだ分かりません。

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} (.*\.([a-zA-Z]{2,4}))$ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* ./index.php?404 [L] 

RewriteCond %{REQUEST_FILENAME} (.*\.([a-zA-Z]{2,4}))$ 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule .* ./index.php?file [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* ./index.php?data [L] 
+0

上記のシステムは、2番目の条件を満たすと機能します。正規表現自体は同じなので、これは私を混乱させます。 – kingmaple

+1

無限のリライトループがあります。解決するには、すでに書き換えられたURLを書き換えないための余分な条件を追加するか、少なくともindex.phpへのリクエストを無視してください。 P.S.どのように 'L'フラグが動作するの:http://stackoverflow.com/questions/6797998/rewriterule-last-l-flag-not-working – LazyOne

+0

あなたは正しい、それは書き換えループだった。あなたが答えを出すなら、私はこれを答えとして受け入れます。 – kingmaple

答えて

1

無限のリライトループがあります。解決するには、すでに書き換えられたURLを書き換えないために余分な条件を追加するか、少なくともindex.phpへのリクエストを無視してください。可能なアプローチの

ワン:

# do not touch any requests to index.php 
RewriteRule ^index\.php$ - [L] 

P.S. Lフラグの仕組み:RewriteRule Last [L] flag not working?

関連する問題