简单的mod重写问题

时间:2009-04-01 06:20:02

标签: mod-rewrite

这是我当前的.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]

谢谢!

1 个答案:

答案 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]