【问题标题】:CakePHP htaccess for removing wwwCakePHP htaccess 用于删除 www
【发布时间】:2012-06-28 05:44:53
【问题描述】:

我知道 htaccess 重定向存在太多问题,但我找不到确切的解决方案。如果有匹配的问题,我很抱歉。

在我的公共 html (webroot) 文件夹中有以下 htaccess 文件:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

然后,为了将带有“www”的 URL 重定向到“非 www”,我添加了两行。文件变成了这样:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]

    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

</IfModule>

所以问题是, www.example.com 重定向到 example.com 但是 www.example.com/mycontroller/ 没有被重定向到 example.com/mycontroller/

我该如何解决这个问题?

【问题讨论】:

    标签: apache .htaccess cakephp cakephp-2.0 no-www


    【解决方案1】:

    第一个 RewriteRule 会将没有实际物理文件/文件夹的每个 URL 重写到 index.php 页面,但如果匹配,它将将此视为最后一条规则并停止处理所有进一步的规则( [L] 标志)。因此,当您仅使用根路径调用时,它不会被触发并继续您的 www 重写规则,但任何其他逻辑 URL 都会触发第一次重写并停止。

    只需更改规则的顺序,将您的 RewriteCond/RewriteRule 对放在默认规则之前。

    <IfModule mod_rewrite.c>
        RewriteEngine On
    
        RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
        RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php [QSA,L]
    
    
    </IfModule>
    

    如果您将其作为虚拟主机运行并有权访问 Apache 的配置文件,请考虑将您的规则放在 Apache 的虚拟主机 conf 文件中以避免在更新 Cake 版本时被覆盖,或者确保以其他方式保护您的更改。

    【讨论】:

    • 非常感谢。我没有对“L”参数打结。也感谢关于 Apache 配置文件的推荐。
    • RedirectMatch www\.(.*)\.(.*) http://(.*)\.(.*) 似乎也可以正常工作。你能告诉我概念上的区别吗?
    • RedirectMatch 带有不同的 Apache 模块 (mod_alias)。它实现了类似的功能,但不如 RewriteCond/RewriteRule 灵活和强大。您只能与 URL-path 匹配(因此,您的示例将不起作用,因为它包含 www 子域,它不是 URL-path 的一部分。您的重定向 URL 也是正则表达式)。使用 RewriteCond/RewriteRule 您可以匹配请求的各个部分并具有多个条件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 2016-01-07
    • 1970-01-01
    • 2012-08-15
    • 2016-10-01
    • 2021-04-08
    • 1970-01-01
    相关资源
    最近更新 更多