LocationMatch Regex 可以匹配查询字符串部分吗?

LocationMatch Regex 可以匹配查询字符串部分吗?

我正在尝试使用 LocationMatch 正则表达式来匹配某个文件通过应用程序上传或下载的时间。该应用程序在 URL 中使用查询字符串。

请求:

“POST /uploads.js?attachment_id=2&filename=issues%20(12).csv&content_type=application%2Fvnd.ms-excel HTTP/1.1” 200 336

我注意到正则表达式似乎无法看到 URL 中“?”后面的查询字符串字符。
正确吗?为什么?
有没有办法能够使用正则表达式匹配查询字符串部分的内容?

答案1

实际上从 Apache 2.4(或更低版本)开始可以使用如下标签:

<LocationMatch "/test/upload.js">
        <If "%{QUERY_STRING} =~ /query=test/">
                ..
                'Your directives'
                ..
       </If>
</LocationMatch>

在此配置中,指令仅在 URL 形式为“/test/upload.js”且包含查询“query=test”的情况下才适用。

答案2

不,LocationMatch 与 query_string 不匹配。

为了补充答案,您可能需要使用 mod_rewrite 中的 RewriteCond 来匹配任何查询字符串,然后将其内部或外部重定向到您想要的任何位置,因为您没有指定除了匹配 query_string 之外的目的,几乎没有什么可说的。

相关内容