Apache HTTPD 2.4 LocationMatch 是否存在问题?

Apache HTTPD 2.4 LocationMatch 是否存在问题?

我在对包含 ? 的特定站点使用 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

相关内容