Mod rewrite 使用mod_rewrite比较url的两个部分

Mod rewrite 使用mod_rewrite比较url的两个部分,mod-rewrite,apache2,Mod Rewrite,Apache2,我想重写url,如果它像:subdomain.xxx.com/zzz/NOT_subdomain/fff 所以我有点像: RewriteCond %{HTTP_HOST}%{REQUEST_URI} ^([a-z0-9-]+).xxx.com/([a-z0-9-]+)/([a-z0-9-]+)/([a-z0-9-]+) RewriteCond %1 =!%3 RewriteRule (.*) http://www.xxx.com/404.html 但当子域和非子域相等时,它确实重写了,我没有

我想重写url,如果它像:subdomain.xxx.com/zzz/NOT_subdomain/fff

所以我有点像:

RewriteCond %{HTTP_HOST}%{REQUEST_URI} ^([a-z0-9-]+).xxx.com/([a-z0-9-]+)/([a-z0-9-]+)/([a-z0-9-]+)
RewriteCond %1 =!%3 
RewriteRule (.*) http://www.xxx.com/404.html
但当子域和非子域相等时,它确实重写了,我没有尝试过!但不起作用。。。有什么帮助吗?
谢谢

尝试将您的状况更改为:

RewriteCond %1//%3 !^(.*)//\1$
在条件的右侧不能有%反向引用,因此可以将两者都放在左侧,并使用
\1
引用分组。因此,
(.*)
%1
中的内容分组,然后
\1
尝试将
%3
中的内容与分组相匹配。如果失败,则两者不相等,条件为真

所以你有:

RewriteCond %{HTTP_HOST}%{REQUEST_URI} ^([a-z0-9-]+).xxx.com/([a-z0-9-]+)/([a-z0-9-]+)/([a-z0-9-]+)
RewriteCond %1//%3 !^(.*)//\1$
RewriteRule (.*) http://www.xxx.com/404.html

你好,谢谢,很有效。但我想确定我是否理解得很好。。。你写过它不能在左边。。。你是说右边?因为在你的规则里它在左边。。。所以\1将引用%1,对吗?所以这也应该起作用:重写条件%1bb%3^(*)bb\1$我说的对吗?Thanks@DusanPlavak是的,我把我的左/右混淆了,是的,正则表达式应该有用。
/
部分仅用于分隔%1和%3