Mod rewrite 简单的修改问题

Mod rewrite 简单的修改问题,mod-rewrite,Mod Rewrite,这是我当前的.htaccess文件: RewriteRule ^$ index.html [QSA] RewriteRule ^([^.]+)$ $1.html [QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] 如您所见,要转到的请求。我想改变这一点,让他们去,请注意,不存在的文件或文件夹,它是由rails处理。我该怎么做?请注意,我尝试了以下方法,但无效: RewriteRul

这是我当前的.htaccess文件:

RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
如您所见,要转到的请求。我想改变这一点,让他们去,请注意,不存在的文件或文件夹,它是由rails处理。我该怎么做?请注意,我尝试了以下方法,但无效:

RewriteRule ^$ foo [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

谢谢

您可以将第一行更改为:

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
?如果您不需要使用QueryStringAappended,您可以去掉
QSA
标志,只需:

RewriteRule ^$ foo [L]

您可以将第一行更改为:

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
?如果您不需要使用QueryStringAappended,您可以去掉
QSA
标志,只需:

RewriteRule ^$ foo [L]

L的问题是最后一行没有执行,所以它没有进入rails(我使用的是fastcgi)。我甚至尝试了你的建议(没有L)并删除了第二行,但它仍然不起作用。我甚至尝试了你的建议(没有L)并删除了第二行,但仍然不起作用。