我快疯了。Apache 完全忽略了 和RewriteCond
。RewriteRule
我预计这会出错,因为 RewriteEngine 尚未设置为On
。我有一堆其他RewriteCond
和RewriteRule
行工作正常,当我检查 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]