【问题标题】:htaccess non-www to www while keeping exact urlhtaccess 非 www 到 www,同时保持准确的 url
【发布时间】:2013-04-08 06:48:45
【问题描述】:

我在我的 htaccess 中使用以下内容

RewriteCond %{HTTP_HOST} !^www
RewriteRule ^(.*)$ http://www.website.com [R=301,L]

除了我有这样的网址website.com/name?query=1

重写是在输入非 www 的 url 时删除 /name

所以website.com/name?query=1 将重写为www.website.com/?query=1

我也在使用 Zend Framework,使用时有默认的 /public 文件夹

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

在重写时,它使链接看起来像这样www.website.com//public/name?query=1

我不需要它不写 //public 并且我不想更改站点的结构,因为有很多指向 /public 文件夹的指针

如何让 RewriteRule 将非 www 更改为 www 并且不删除“名称”?

【问题讨论】:

    标签: php .htaccess zend-framework mod-rewrite centos6


    【解决方案1】:

    试试这个。

    # No W's to W's keeping all the URI items intact
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ http://www\.%{HTTP_HOST}/$1 [R=301,L]
    

    【讨论】:

    • 改写为 website.com//public/name?itemdetails=456 我需要它不写 /public
    • 如您所问,我正确回答了您的问题。如果您尝试访问,比如说http://www.website.com/admin/login.php&msg=error,它将重定向到http://website.com/admin/login.php&msg=error,保持URL 不变。除非您有其他事情要做,否则如果所有内容都在/public/ 中,我建议在重写条件上方添加RewriteBase /public/
    • 这是一个通用的解决方案,值得讨论。问题是 HTTP_HOST 取决于服务器的配置,我认为是 Apache 中的 ServerName。使用 %{REQUEST_URI} 可能更可靠
    【解决方案2】:
    RewriteCond %{HTTP_HOST} !^www
    RewriteRule ^(.*)$ http://www.website.com/$1 [QSA,R=301,L]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-16
      • 2014-09-22
      • 1970-01-01
      • 2012-07-01
      • 2019-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多