mod_rewrite帮助传递查询字符串的完整路径

时间:2009-04-30 23:38:13

标签: apache mod-rewrite rewrite

我正在基于整个网址进行一些缓存,包括查询字符串,并且需要Apache识别文件并使用它。它似乎找到一个匹配,但然后在渲染文件之前关闭查询字符串。

url:www.somesite.com/default.asp?foo = bar

缓存文件夹中文件系统上的缓存页面文件名:default.asp?foo = bar

我目前尝试重写:

RewriteCond /site_root/cache/%{REQUEST_FILENAME}?%{QUERY_STRING} -f
RewriteRule ^.*$ /site_root/cache/%{REQUEST_FILENAME}?%{QUERY_STRING} [L,QSA]

2 个答案:

答案 0 :(得分:2)

你可能想尝试这样的事情:

RewriteRule ^(.+)$ /site_root/cache/$1 [L,QSA]

这应该将URL中的“default.asp”重写为您正在尝试使用的思考。 QSA应该将原始查询字符串附加到重写的URL。

我不是100%确定这是你正在寻找的,所以如果它不让我知道,我会尽力帮助。

答案 1 :(得分:1)

我找到了一个适合我需要的解决方案。

似乎Apache真的想把查询字符串拉成一组参数,这是正常的。

为了在Apache上拉一个我刚刚更换了?在带有|的字符串中。一旦我这样做,它就不再将字符串视为查询字符串了。因为params与我的情况无关,所以它工作正常。我所要做的就是确保用管道而不是问号写出文件名。很容易。

如果您有更好的解决方案,请随时发表评论。

这是为我做的规则。由于Apache不会将结果识别为它知道的MIME,因此我将其强制为text / html。

RewriteRule ^(.+)$ /site_root/cache/%{HTTP_HOST}$1|%{QUERY_STRING} [L,T=text/html]