我与cakephp的htaccess不起作用

时间:2013-11-05 16:54:28

标签: regex apache .htaccess cakephp mod-rewrite

我的问题可能是.htaccess

我使用cakephp框架(2.0)并使用.htaccesnon-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>

1 个答案:

答案 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>