【问题标题】:My htaccess with cakephp doensn't work我使用 cakephp 的 htaccess 不起作用
【发布时间】:2013-11-06 01:35:05
【问题描述】:

我的.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>

【问题讨论】:

  • 你能否在你的主 .htaccess 中将此规则设为 第一条规则
  • 现在就这样(检查更新)
  • 通过此更改,您可以在新浏览器中进行测试吗?
  • 奇怪,当我在 Internet Explorer 中执行此操作时,它可以工作,所以你的意思是,我需要清理我在 chrome 上的缓存,这样我才能看到它可以工作?
  • 是的,清除缓存将使 chrome 工作。

标签: regex apache .htaccess cakephp mod-rewrite


【解决方案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>

【讨论】:

    猜你喜欢
    • 2016-02-22
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多