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_NAME
equals ,使用Apache 表达式HTTP_HOST
会更简单:
# Case-sensitive comparison.
RewriteCond expr "%{HTTP_HOST} == %{SERVER_NAME}"
或者
# Case-insensitive comparison.
RewriteCond expr "tolower(%{HTTP_HOST}) == tolower(%{SERVER_NAME})"