.htaccess中重写规则的例外情况

时间:2017-05-02 05:09:33

标签: php apache .htaccess mod-rewrite url-rewriting

我有一个ReWrite规则如下:

RewriteRule ^([^/\.]+)/?$ "http://example2.com/test?id=$1" [NE,L,QSA]

这基本上会重定向跟随我的域名的任何内容(例如 www.example1.com/testing www.example2.com/test?id=testing )。我有example1和example2指向相同的IP。

我想在上述规则中添加一个例外,以便根本不考虑 www.example1.com/abcxyz

我尝试了RewriteCond %{REQUEST_URI} !/abcxyz,但似乎错误地说出了太多的重定向。我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

错误是由重定向网址再次与重定向匹配引起的。你也需要排除它。尝试:

RewriteCond %{REQUEST_URI} !=/abcxyz
RewriteCond %{REQUEST_URI} !=/test
RewriteRule ^([^/.]+)/?$ http://example2.com/test?id=$1 [NE,L,QSA]

请记住,查询字符串不是RewriteRule匹配的一部分,因此重定向到test会再次匹配并导致循环。

你不需要在角色类中逃脱点,所以我改变了。不需要双引号。

您是重定向还是重写?如果重定向您应该是明确的,并添加所需类型的R标志。对于301使用:

RewriteCond %{REQUEST_URI} !=/abcxyz
RewriteCond %{REQUEST_URI} !=/test
RewriteRule ^([^/.]+)/?$ http://example2.com/test?id=$1 [R=301,NE,L,QSA]

如果重写,你不应该在那里拥有域名和协议:

RewriteCond %{REQUEST_URI} !=/abcxyz
RewriteCond %{REQUEST_URI} !=/test
RewriteRule ^([^/.]+)/?$ /test?id=$1 [NE,L,QSA]
相关问题