Htaccess RedirectMatch正确使用

时间:2012-01-23 20:59:27

标签: .htaccess

我的.htaccess文件设置如下。这是一个简单的概念,所有请求都转发到cgi-bin / controller.rb,除了/ images,/ css,/ javascripts或/ cgi-bin中的任何请求

我还希望将root重定向到/ 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]

1 个答案:

答案 0 :(得分: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],而不是让地址栏保持干净整洁。

还要记得清除浏览器缓存,因为永久重定向非常积极地缓存。