Mad*_*aks 10 apache mod-rewrite
使用mod_rewrite的,我想使用一个服务器变量作为部分CondPattern的RewriteCond,是这样的:
RewriteCond %{HTTP_HOST} !^%{SERVER_NAME} [NC]
^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
这将非常有用.我知道这CondPattern是一个与Perl兼容的正则表达式,这意味着例如{}我的示例中的字符需要以某种方式进行转义.我只是为了证明这个想法而离开了它.
据我所知,上述文档没有提及任何关于它的内容,而且谷歌搜索我无法找到任何确定的内容.我的预感是答案是否定的,但我想肯定地知道.
mxx*_*xxk 10
CondPattern没有扩展%{VAR}变量或%N反向引用到以前RewriteCond,所以大卫的建议
RewriteCond %{SERVER_NAME} ^(.*)$
RewriteCond %{HTTP_HOST} !%1
Run Code Online (Sandbox Code Playgroud)
只要%{HTTP_HOST}不包含文字字符串就会成功%1,这不是你想要的.
根据你的例子,你想要什么
RewriteCond %{HTTP_HOST} !^%{SERVER_NAME} [NC]
Run Code Online (Sandbox Code Playgroud)
如果HTTP_HOST不以SERVER_NAME(不区分大小写)开头匹配.您可以使用单个实现它,RewriteCond如果您包含SERVER_NAME在TestString,在正则表达式中捕获它,并使用\N再次引用它:
RewriteCond "%{SERVER_NAME} %{HTTP_HOST}" "!(^[^ ]*) \1" [NC]
Run Code Online (Sandbox Code Playgroud)
正则表达式使用空格来分隔SERVER_NAME,HTTP_HOST因为两个变量都不能有空格.
如果你实际上只是想测试是否SERVER_NAME等于HTTP_HOST,那么使用Apache表达式会更简单:
# Case-sensitive comparison.
RewriteCond expr "%{HTTP_HOST} == %{SERVER_NAME}"
Run Code Online (Sandbox Code Playgroud)
要么
# Case-insensitive comparison.
RewriteCond expr "tolower(%{HTTP_HOST}) == tolower(%{SERVER_NAME})"
Run Code Online (Sandbox Code Playgroud)