我想将所有到 example.com 的流量重定向到 www.example.com,然后将所有内容重写为 /。
因此,如果访客出于某种原因点击http://example.com/foo/bar我想将他们重定向到http://www.example.com/foo/bar然后将该请求重写为 /index.php
这是我目前所得到的(非 www 到 www 的重定向有效):
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC,OR]
RewriteCond %{HTTP_HOST} ^11\.22\.33\.44
RewriteRule (.*) http://www.example.com$1 [R=301,L]
编辑:
好的,我已经可以开始处理这个了:
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC,OR]
RewriteCond %{HTTP_HOST} ^123\.123\.123\.123
RewriteRule (.*) http://www.example.com$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]
但最奇怪的是:Apache 做了一些奇怪的事情http://www.example.com/home-- 就像 apache 对此路径有一些内部路由一样,因为它绕过了我的 vhost 配置并发送了自己的 404。而且/home
我的文档根目录中没有任何内容,所以 -s/-d/-l 应该无关紧要。此外,我已经 grep:ed for home in,/etc/apache2
没有任何结果。
任何人?
更新:
我在 apache 错误日志中看到这个:[Fri Mar 25 04:33:45 2011] [error] [client 123.123.123.123] File does not exist: /var/www/example/web/home
所以我猜测该请求到达了我的虚拟主机但未被我的规则捕获?
更新 2:
这很奇怪。如果我删除此行,对 的RewriteRule ^.*$ - [NC,L]
请求就会/home
通过。但只有对 的请求/home
。
相反,我最终得到了以下有效的配置:
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC,OR]
RewriteCond %{HTTP_HOST} ^123\.123\.123\.123
RewriteRule (.*) http://www.example.com$1 [R=301,L]
<Location />
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(js|ico|gif|jpg|png|css|txt)$ /index.php
</Location>
答案1
添加
RewriteRule ^(.+)$ index.php [L,QSA]