我正在尝试使用 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 之外的目的,几乎没有什么可说的。