Php .htaccess内重写规则中出现异常
我有一个重写规则如下:Php .htaccess内重写规则中出现异常,php,apache,.htaccess,mod-rewrite,url-rewriting,Php,Apache,.htaccess,Mod Rewrite,Url Rewriting,我有一个重写规则如下: RewriteRule ^([^/\.]+)/?$ "http://example2.com/test?id=$1" [NE,L,QSA] 它基本上会将我的域名后面的任何内容重定向(例如www.example1.com/testing到www.example2.com/test?id=testing)。示例1和示例2都指向同一个IP 我想在上述规则中添加一个例外,以便该规则根本不考虑www.example1.com/abcxyz 我尝试了RewriteCond%{REQ
RewriteRule ^([^/\.]+)/?$ "http://example2.com/test?id=$1" [NE,L,QSA]
它基本上会将我的域名后面的任何内容重定向(例如www.example1.com/testing到www.example2.com/test?id=testing)。示例1和示例2都指向同一个IP
我想在上述规则中添加一个例外,以便该规则根本不考虑www.example1.com/abcxyz
我尝试了
RewriteCond%{REQUEST\u URI}/abcxyz
但它似乎因为说了太多重定向而出错。我是否遗漏了一些内容???错误是由您的重定向URL再次与重定向匹配引起的。你也需要排除这一点。尝试:
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]
你没明白你的问题吗?你能解释一下吗?我的错误是我在重写前写了重写规则,没有意识到这很重要。重写条件%{REQUEST_URI}/abcxyz在那之后似乎工作正常。很好,很高兴你把它修好了。RewriteCond指令实际上是在RewriteRule匹配之后运行的,但是是的,它们必须放在前面。我猜你实际重写的URL不匹配,只有你的例子这样做。