【问题标题】:http:// redirects to https://www.www with htaccesshttp:// 使用 htaccess 重定向到 https://www.www
【发布时间】:2016-06-28 18:42:56
【问题描述】:

我在我的根域中安装了 CI。 SSL 证书已安装并正常工作。当我将 http:// 重定向到 https://www 时,它会重定向到 https://www.www(额外的 www),正如用户报告的那样,在某些计算机和某些浏览器上也是如此。但是,当我从重定向中删除“www”时,一切都很好。好像 www 正在循环。到目前为止,我已经挖掘了我的代码一百次,并且没有看到代码重定向的迹象(我的意思是添加了额外的 www)。我正在用 htaceess 做这件事。任何帮助将不胜感激。这是我的 htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

#Force SSL
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R,L]

#Removes access to the system folder by users.
#Additionally this will allow you to create a System.php controller,
#previously this would not have been possible.
#'system' can be replaced if you have renamed your system folder.
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php/$1 [L]
#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn't true it sends the
#request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>

我用 Centos VPS 在 apache 上运行它。

非常感谢!

【问题讨论】:

    标签: apache .htaccess https url-redirection centos6


    【解决方案1】:

    HTTP_HOST 是请求的“目标主机”部分,例如:www.mydomain.com。
    REQUEST_URI 通常是为了访问某个页面而给出的路径;例如,'/folder/index.html'。

    在您的 RewriteRule 中,您说要输入“www”。在请求的域名前面。
    当有人要求 http://www.yourdomain.com 时,您不希望这样。
    没有 www。在您的 RewriteRule 中,请求 http://yourdomain.com 的人被重定向到 https://yourdomain.com

    当你想重定向到 https 和 www 时你需要添加条件。查看Apache docs on Canonical hostquestions/4083221/how-to-redirect-all-http-requests-to-https 以获得此解决方案:

    RewriteCond %{HTTPS} !=on [OR]  
    RewriteCond %{HTTPS_HOST} !^www.yourdomain.com$ [NC]  
    RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [L,R=301]
    

    【讨论】:

    • Pabon,好吧,我明白你在说什么,你的观点很有道理。我从 RewriteRule 中删除了 www,它可以顺利打开。但随之而来的是它自身的另一个问题。如何获取带有 https://'www'.example.com 而不仅仅是 https://.example.com 的 URL?你有什么解决办法吗?我想要实现的是:如果用户键入我的域,例如:example.com,它会重定向到example.com
    • 你的代码就是这样工作的。在 https 上获取所有内容:// www。等你需要一些额外的逻辑(寻找规范重定向)。
    • 我无法理解您的回答或评论。你能详细说明一下吗?我希望我的 htaccess 强制 ssl,它已经在做。我的问题是:如果我从 RewriteRule 中删除“www”,它仍然会强制使用 ssl,但没有“www”。我想用 ssl 实现“www”,这样我的 url 看起来像:https://www.example.com
    • HTTP_HOST 是有人要求的。可以带 www 也可以不带 www。以及将使用的精确度。唯一改变的是 http 到 https。
    • 是的,我明白。我想做的是,就像 Facebook 或其他一些流行的网站一样:当您输入:example.com 而没有提及www 他们仍然会将您重定向到带有www 的ssl 版本,例如:https://www.example.com ,我也想达到同样的效果。但我失败了。因为它广告了一个额外的www。你能帮我弄清楚吗?我已经成功重定向 https,但 url 中没有 www 部分。反正我想要的。谢谢
    猜你喜欢
    • 2019-03-18
    • 2012-10-11
    • 2015-11-10
    • 2018-08-31
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 2015-02-16
    • 2017-07-18
    相关资源
    最近更新 更多