我的.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]
答案 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]
,而不是让地址栏保持干净整洁。
还要记得清除浏览器缓存,因为永久重定向非常积极地缓存。