1

我的问题可能是我的.htaccess

我使用 cakephp 框架(2.0),并使用此代码.htacces将 a 重定向non-www到 a :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.nlwww.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>
4

1 回答 1

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>
于 2013-11-05T17:26:19.013 回答