CondPattern不会扩展%{VAR}变量或%N对前一个的反向引用RewriteCond,所以大卫的建议
RewriteCond %{SERVER_NAME} ^(.*)$
RewriteCond %{HTTP_HOST} !%1
%{HTTP_HOST}只要不包含文字 string就会成功%1,这不是您想要的。
根据您的示例,您想要什么
RewriteCond %{HTTP_HOST} !^%{SERVER_NAME} [NC]
如果HTTP_HOST不以SERVER_NAME(不区分大小写)开头,则匹配。RewriteCond如果您包含SERVER_NAME在 中,则可以使用单个来实现这一点TestString,在正则表达式中捕获它,并使用\N它再次引用它:
RewriteCond "%{SERVER_NAME} %{HTTP_HOST}" "!(^[^ ]*) \1" [NC]
正则表达式使用空格分隔SERVER_NAME,HTTP_HOST因为两个变量都不能有空格。
Apache 表达式(2.4 及更高版本)
如果您实际上只是想测试 if SERVER_NAMEequals ,使用Apache 表达式HTTP_HOST会更简单:
# Case-sensitive comparison.
RewriteCond expr "%{HTTP_HOST} == %{SERVER_NAME}"
或者
# Case-insensitive comparison.
RewriteCond expr "tolower(%{HTTP_HOST}) == tolower(%{SERVER_NAME})"