2012-01-23 5 views
1

私の.htaccessファイルは次のように設定されています。/images、/ css、/ javascripts、/ cgi-bin内のすべてのリクエストを除いて、すべてのリクエストがcgi-bin/controller.rbに転送されるという単純なコンセプトです。Htaccess RedirectMatch適正使用

また、/index/showにリダイレクトされますが、それはエラーを起こす部分です。/index/showindex/showindex/showに無限にリダイレクトされます。

誰かが私のリダイレクトマッチがうまくいかない理由を説明できますか?

RedirectMatch permanent ^/$ /index/show 

ErrorDocument 404 /404 

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/images/ [NC] 
RewriteCond %{REQUEST_URI} !^/css/ [NC] 
RewriteCond %{REQUEST_URI} !^/javascripts/ [NC] 
RewriteCond %{REQUEST_URI} !^/cgi-bin/ [NC] 
RewriteRule (.*) /cgi-bin/controller.rb?%{QUERY_STRING}&page=$1 [L] 

答えて

3

RedirectMatchとRewriteRuleを同時に使用しないでください。それらは異なるモジュールであり、要求フロー内の異なる時間に適用されます。あなただけのRewriteRuleのを使用して同じことを達成することができます:あなたは本当にリダイレクトをしたい場合は

RewriteEngine on 

RewriteCond %{REQUEST_URI} !^/index/show [NC] 
RewriteRule ^$ /index/show [L] 

RewriteCond %{REQUEST_URI} !^/index/show [NC] 
RewriteCond %{REQUEST_URI} !^/images/ [NC] 
RewriteCond %{REQUEST_URI} !^/css/ [NC] 
RewriteCond %{REQUEST_URI} !^/javascripts/ [NC] 
RewriteCond %{REQUEST_URI} !^/cgi-bin/ [NC] 
RewriteRule (.*) /cgi-bin/controller.rb?page=$1 [L,QSA] 

は、必要に応じて代わりにきれいアドレスバーを残しての、RewriteRule ^$ /index/show [L,R=301]を使用しています。

また、恒久リダイレクトが非常に積極的にキャッシュされるため、ブラウザのキャッシュをクリアすることを忘れないでください。

+0

完全に作業しました。あなたの答えは、htaccessファイルがどのように機能するかを少し理解してくれました。ありがとう。 – weexpectedTHIS

+0

RedirectMatchとRewriteRuleを同時に使用しないでください。それらが異なるモジュールであり、要求フローにおいて異なる時間に適用されていることは、理由を構成するものではない。 –

+0

@ user2407309さまざまなサーバーで異なることがある、不安定な動作を説明するのを避けることは、良い方法のようです。 – Gerben

関連する問題