使用 REQUEST_URI 的 RewriteCond 异常对使用新域的 RewriteRule 不起作用

使用 REQUEST_URI 的 RewriteCond 异常对使用新域的 RewriteRule 不起作用

跟随异常不起作用。http://www.domain.com有或没有 /test 重定向到http://www.example.de/foo/,但例外不应该!

RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteCond %{REQUEST_URI} !^/test$
RewriteRule ^(.*)$ http://www.example.de/foo/ [R=302,L]

什么原因?

答案1

这与规则相冲突

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

在 .htaccess 文件末尾。

如果我为 index.php 添加一个例外,例如

RewriteCond %{HTTP_HOST} ^www.domain.example$ [NC]
RewriteCond %{REQUEST_URI} !^/test$
RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ http://www.example.org/foo/ [R=302,L]

那么它就起作用了。

答案2

我发现这是解决我的问题的方法,但我发现我需要添加另一个“根”请求条件驱动的重写规则才能使我的最终解决方案发挥作用。根据所需的逻辑,它可能如下所示:

RewriteCond %{HTTP_HOST} ^www.domain.example$ [NC]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ /some-uri [L,R=302]

RewriteCond %{HTTP_HOST} ^www.domain.example$ [NC]
RewriteCond %{REQUEST_URI} !^/some-uri$
RewriteRule ^(.*)$ /some-uri [L,R=302]
RewriteCond %{REQUEST_URI} !^/index.php$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /some-uri [L,R=302]

相关内容