3

我正在根据整个 url 做一些缓存,包括查询字符串,并且需要 Apache 来识别文件并使用它。它似乎找到了匹配项,但随后在呈现文件之前将查询字符串剥离。

网址: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]
4

2 回答 2

2

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

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

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

我不是 100% 确定这就是你要找的东西,所以如果没有让我知道,我会尽力提供帮助。

于 2009-05-01T03:10:55.613 回答
1

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

看来 Apache 真的很想把查询字符串拉出来成一组 params,这很正常。

为了在 Apache 上完成任务,我刚刚替换了 ? 在带有 | 的字符串中。一旦我这样做了,它就不再将字符串视为查询字符串。由于参数在我的情况下无关紧要,因此可以正常工作。我所要做的就是确保我用管道而不是问号写出文件名。很容易。

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

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

RewriteRule ^(.+)$ /site_root/cache/%{HTTP_HOST}$1|%{QUERY_STRING} [L,T=text/html]
于 2009-05-01T06:37:38.847 回答