这是我当前的.htaccess文件:
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
如您所见,http://domain.com的请求转到http://domain.com/index.html。我想更改它以便它们转到http://domain.com/foo,请注意它不作为文件或文件夹存在,它由rails处理。我该怎么做呢?请注意,我尝试了以下操作,但它不起作用:
RewriteRule ^$ foo [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
谢谢!
答案 0 :(得分:1)
您可以安全地将第一行更改为:
RewriteRule ^$ foo [QSA,L]
L
标志告诉mod-rewrite它不应该在那之后应用任何其他规则。现在的问题是第二个规则在第一个规则之后被应用,你最终在“foo.html”而不是“foo”,对吗?
您尝试发送到“foo”和原始重定向到“index.html”之间的区别在于第二条规则适用于不包含句点的请求。因此,当第一条规则重定向到“index.html”时,在使用它之后,第二条规则不再有效。但是,既然您没有重定向到其中包含句点的位置,则第二个规则将在第一个规则之后应用,因此您将获得双重重定向。
此外,您可以从第一行删除QSA
标记,但这取决于您的网站。如果有人访问了http://domain.com/?user=fred
这样的网站,您要将其发送到http://domain.com/foo?user=fred
,还是http://domain.com/foo
?如果您不需要 Q uery S 重置 A ,则可以删除QSA
标记,并且只需:
RewriteRule ^$ foo [L]