【问题标题】:mod_rewrite help to pass full path with query stringmod_rewrite 帮助通过查询字符串传递完整路径
【发布时间】:2009-05-01 14:37:38
【问题描述】:

我正在根据整个 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]

【问题讨论】:

    标签: apache mod-rewrite rewrite


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢 superchink。我正在使用 RewriteLog 来观察正在发生的事情,看起来您的尝试删除了查询字符串,并且只尝试在 default.asp 上进行匹配。我需要保留文件名和查询字符串,以便 apache 可以提供具有相同名称的文件。无论是 default.asp 还是 index.php 还是 foobar.baz,它都需要提供匹配的文件。文件名包括我前面提到的查询字符串。
    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-26
      • 2010-12-25
      • 2011-04-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      相关资源
      最近更新 更多