.htaccess Htaccess重定向匹配正确使用

.htaccess Htaccess重定向匹配正确使用,.htaccess,.htaccess,我的.htaccess文件设置如下所示。这是一个简单的概念,所有请求都被转发到cgi-bin/controller.rb,除了那些对/images、/css、/javascripts或/cgi-bin中的任何内容的请求 我还希望根目录被重定向到/index/show,但这就是出错的部分。它只是无限地重定向到/index/showindex/showindex/showindex/show 有人能解释为什么我的重定向匹配不起作用吗 RedirectMatch permanent ^/$ /inde

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

我还希望根目录被重定向到/index/show,但这就是出错的部分。它只是无限地重定向到/index/showindex/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]

避免同时使用重定向匹配和重写规则。这些是不同的模块,在请求流的不同时间应用。您可以仅使用“重写规则”实现相同的功能:

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]
,而不是保持地址栏整洁


还记得清除浏览器缓存,因为永久重定向缓存得非常厉害

工作得很好。您的回答帮助我更多地了解了htaccess文件的工作原理。谢谢。为什么要避免同时使用重定向匹配和重写规则?它们是不同的模块,并且在请求流中的不同时间应用,这并不是一个原因。@user2407309避免难以解释的不稳定行为,这在不同的服务器上可能是不同的,这似乎是一个很好的做法。