Apache 忽略 RewriteCond 和 RewriteRule

Apache 忽略 RewriteCond 和 RewriteRule

我快疯了。Apache 完全忽略了 和RewriteCondRewriteRule我预计这会出错,因为 RewriteEngine 尚未设置为On。我有一堆其他RewriteCondRewriteRule行工作正常,当我检查 Rewrite 日志(我已启用)时,它显示跳过了这两个。我修剪了其他所有内容以验证它们都没有导致问题,果然,Apache 愉快地继续使用此配置,没有出现任何错误:

DocumentRoot /var/sites/public
<Directory /var/sites/public>
    AllowOverride None
    SetEnv APPLICATION_ENV production

    RewriteCond %{HTTP_HOST} !^$
    RewriteRule ^/(.*) http://www.example.com/$1 [L,R]

    Order allow,deny
    allow from all
</Directory>

我确信这里肯定存在一些明显的错误,只是我盯着它看得太久而看不见。如能得到任何帮助我将不胜感激。

注意:我在 Vhost 中没有这个。配置中没有任何 Vhost。我已删除 RewriteCond,但仍然没有抛出任何错误。我也尝试过使用 RewriteEngine On。

答案1

只需快速浏览一下,我就会发现 RewriteCond 不会匹配任何内容,除了看似不匹配的内容。不确定 mod_rewrite 对此有何感受。

您到底想用这条规则做什么?

例如,如果您希望它匹配除 (www.)example.com 之外的任何域并将其转发到 www.example.com,那么您将有如下规则:

RewriteCond %{HTTP_HOST} !^(www.)?example\.com$
RewriteRule (.*) http://www.example.com/$1 [R,L]

答案2

你也想要这个:

RewriteCond %{HTTP_HOST} .

...或者换一种写法:

RewriteCond %{HTTP_HOST}!=""

所以:

RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^(www.)?example\.com$
RewriteRule (.*) http://www.example.com/$1 [R,L]

相关内容