我在对包含 ? 的特定站点使用 LocationMatch 时遇到了问题。
我当前的 LocationMatch 是 <LocationMatch "^/SOME/FOLDER/STRUCTURE/TEST/?cmd=logout">
实际的 URL 包含?,但我无法使这个特定的位置匹配正常工作。
我收到的错误是 AH01630:服务器配置拒绝客户端:/etc/httpd/htdocs,引用者:https://URL/SOME/FOLDER/STRUCTURE/TEST/?cmd=logout
答案1
正如 ezra-s 所说,查询字符串(即 URL 中 后面的部分?
)不是匹配位置的一部分。因此,您必须单独测试它,例如
<Location /SOME/FOLDER/STRUCTURE/TEST>
<If "%{QUERY_STRING} == cmd=logout">
...
</If>
</Location>
它可以匹配整个查询字符串。但如果cmd=logout
可能只是较长查询字符串的一部分,则需要使用正则表达式的更通用条件,例如
<If "%{QUERY_STRING} =~ /(^|&)cmd=logout(&|$)/">
看表达式解析器有关该If
条件的信息,包括使用的示例QUERY_STRING
。