我的问题可能是.htaccess
我使用cakephp框架(2.0)并使用.htacces
将non-www
重定向到www
使用此代码:
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
现在出现问题,当有人点击链接http://mysite.nl/controller/view/E1时,他们会转到http://www.mysite.nl/index.php
而不是http://www.mysite.nl/controller/view/E1 (使用www)
这次重写适用于 mysite.nl 到 www.mysite.nl
有人可以告诉我我做错了什么吗?我搜索了不同类型的重写规则,但没有运气。
评论后的完整.htaccess文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
答案 0 :(得分:1)
规则的排序在.htaccess中非常重要。通常,您的301应该出现前前控制器规则,以捕获所有请求并更改请求URI。
试试这段代码:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# add www rule
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
# cakephp front controller rule
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>