HTACCESS HTTPS从WWW重定向到非WWW

时间:2017-02-11 作者:DinhTv

我已添加.htaccess https 重定向自wwwnon-www 使用:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www\\.
    RewriteCond %{HTTPS}s ^on(s)|off
    RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\\.)?(.+)$
    RewriteRule ^ %1%3%{REQUEST_URI} [R=301,L]
</IfModule>`
当我访问我的域时,以下重定向不会出现任何问题:

http://www.example.com     → http://example.com
http://www.example.com/abc → http://example.com/abc
但是当我访问我的域时https://www.example.comhttps://www.example.com/abs, 我的域不重定向,并显示错误代码:SSL_ERROR_INTERNAL_ERROR_ALERT (在Firefox中)或ERR_SSL_PROTOCOL_ERROR (镀铬)

我使用了WordPress和非常简单的SSL插件。

你知道如何纠正我的错误吗?

1 个回复
最合适的回答,由SO网友:Fayaz 整理而成

在给出代码之前,让我解释几点:

Point 1:

如果你只允许https 链接。混合http &;https 对于相同的内容breaks the security 添加人https. 具有http, 您永远无法确保您的访问者显示的页面与您从服务器提供的页面相同。

Point 2:

搜索引擎考虑http &;https 站点必须是不同的站点,即使域是相同的。因此,如果设置不正确,您可能会受到重复处罚。所以建议你去https 一切为了更好SEO

Point 3:

即使有适当的.htaccess 如果SSL设置不正确,则可能会出现相同的错误。所以在你改变.htaccess 代码,最好根据标准测试SSL设置。您可以使用以下工具:this.

推荐代码:

基于以上几点,您可以使用以下代码:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{HTTPS}        =off   [OR]
    RewriteCond %{HTTP_HOST}    !^example\\.com$
    RewriteRule ^(.*)$          "https://example.com/$1" [R=301,L]

    # remaining htaccess mod_rewrite CODE for WordPress
</IfModule>
这将执行以下示例重定向:

http://www.example.com/     → https://example.com/
http://www.example.com/abc  → https://example.com/abc
https://www.example.com/    → https://example.com/
https://www.example.com/abc → https://example.com/abc

# Additionally, even if your site is reachable by IP or
# some other domains or subdomains, this CODE will fix that too
http://Your_Server_IP/abc          → https://example.com/abc
http://sub-dmoani.example.com/abc  → https://example.com/abc
http://www.other-domain.com/abc    → https://example.com/abc
不推荐的代码:如果出于某种原因,您不想遵循上述建议(&H);仍然希望同时允许httphttps, 您可以使用以下代码(基于this answer):

<IfModule mod_rewrite.c>
    RewriteEngine On

    # set protocol variable
    RewriteCond %{HTTPS} =on
    RewriteRule ^(.*)$ - [env=proto:https]
    RewriteCond %{HTTPS} =off
    RewriteRule ^(.*)$ - [env=proto:http]

    RewriteCond %{HTTP_HOST} !^example\\.com$
    RewriteRule ^(.*)$       "%{ENV:proto}://example.com/$1" [R=301,L]

    # remaining htaccess mod_rewrite CODE for WordPress
</IfModule>
这将执行以下示例重定向:

http://www.example.com/     → http://example.com/
http://www.example.com/abc  → http://example.com/abc

https://www.example.com/    → https://example.com/
https://www.example.com/abc → https://example.com/abc

相关推荐

多站点:将主站点的URL更改为HTTPS

我已经在新安装的WordPress上设置了多站点。然后我创建了一些其他网站,所以,最后,我有了这样的东西http://example.comhttp://site1.example.comhttp://site2.example.comhttp://site3.example.com然后我安装了SSL数字证书,因此我更改了网站的URL以匹配HTTPS方案:http://example.com更改我转到的方案Sites > All Sites, 然后单击每个站点,在选项卡“信息”(第一个)中,我只需更