【问题标题】:htaccess rewrite conflict between www to non-www and new directoryhtaccess 重写 www 到非 www 和新目录之间的冲突
【发布时间】:2016-12-15 14:30:49
【问题描述】:

好的,所以我有一个网站,我们强制从 WWW 重定向到该站点的非 WWW 版本,因为我们使用的 CMS 只能处理每个站点的一个 realUrl 参数。

我在系统中有一个通用重写,它强制所有 WWW 流量到 now-WWW,如下所示:

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

这适用于大多数页面。现在我遇到的问题是这个。我在站点中有一个新的子目录,并且我还将所有流量从旧页面重定向到新的子目录。像这样:

Redirect 301 /my-page/ /new-directory/my-page/

所以发生的情况是,如果有人来到 http://example.com/my-page,那么他们会被正确地重定向到 http://example.com/new-directory/my-page

但是,如果他们来到 http://www.example.com/my-page - 他们将被重定向到 http://example.com 但永远不会回到 http://example.com/new-directory/my-page .

任何关于如何克服这个问题的帮助将不胜感激。 :)

【问题讨论】:

    标签: apache .htaccess redirect mod-rewrite


    【解决方案1】:

    不要将Redirect 指令与mod_rewrite 规则混用。有这样的规则:

    RewriteEngine On
    
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^ http://%1%{REQUEST_URI} [R=301,NE,L]
    
    RewriteRule ^my-page(/.*)?$ /new-directory$1 [R=301,NE,NC,L]
    

    在测试此更改之前清除浏览器缓存。

    【讨论】:

    • 感谢您的帮助!这似乎仍然会将所有传入的 WWW 流量重定向回网站的主页,而忽略任何额外的参数。
    • 您清除浏览器缓存了吗?确保这些规则高于任何其他规则。
    • 是的,我都做了。行为仍然没有改变。每次访问 www.example.com/my-page 的尝试总是最终重定向到 example.com,而不是 example.com/new-directory/my-page
    • 在我的 Apache 上,这些规则运行良好并重定向到 localhost/new-directory/my-page,所以我怀疑这是您这边的一些错误配置/代码。
    • 嗯。我会四处挖掘,看看是否在更高级别上配置错误。
    【解决方案2】:

    如果您有权访问 vhost 配置,请确保您的 ServerName 不是 www,并且 www 是 ServerAilas

    【讨论】:

      猜你喜欢
      • 2012-10-17
      • 2014-12-16
      • 1970-01-01
      • 2015-01-10
      • 2019-01-28
      • 2012-06-01
      • 1970-01-01
      • 2011-04-12
      • 2015-12-31
      相关资源
      最近更新 更多