【问题标题】:WWW to NON WWW Urls (Remove WWW) using Apache (.htaccess)使用 Apache (.htaccess) 的 WWW 到非 WWW 网址(删除 WWW)
【发布时间】:2016-01-07 11:38:24
【问题描述】:

我必须将我的网站从 https://www.example.com/ 重定向到 https://website.com/

SSL 已正确安装在我的服务器上。

我正在使用 Apache 并且必须使用 Apache 来执行此操作(httpd.conf/ssl.conf.htaccess

我已经使用了几乎所有可以搜索的方法,但没有一个适合我。

  • http://www.example.com/ 正确重定向到 https://example.com/

  • http://example.com/ 正确重定向到 https://example.com/

但是

  • https://www.example.com/ 未正确重定向https://example.com/

它给了我“无效的证书错误”,当我在浏览器中添加异常(接受证书)时,它会重定向到https://example.com/。但是我不想添加这个异常(在浏览器中添加证书)。

请注意,我的 SSL 证书是为 example.com 而不是 www.example.com 颁发的。

以下是我的.htaccess 规则和条件

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://{REQUEST_URI} [L,R=301]

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

我也使用了以下方法,但这些也不起作用:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^example.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

也使用过这个,但没有运气

RewriteEngine On
RewriteCond %{HTTP_HOST} !^example.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

这个也不行

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

我尝试了 5-6 种其他解决方案(类似于上面),但没有一个奏效。我上面提到的前两种模式都适用,但对https://www 无效。

注意.htaccess 的这些条件已经达到,我的意思是.htaccess 没有被忽略。我已经使用重定向验证了这一点,并且上面提到的两种模式也可以正常工作。

httpd.conf/ssl.conf 中,AllowOverride 指令设置为All

我可以访问httpd.conf/ssl.conf

PHP 版本 5.5.29

Apache 2.4.6 (CentOS) OpenSSL/1.0.1e-fips PHP/5.5.29

主机名:端口 example.com:443

最后但并非最不重要的一点是,我的网站 https://example.com/ 无法在 Internet Explorer 和 Safari 中打开并出现证书问题(错误),但是当我使用 SSL 检查器(多个)检查我的域时,所有 SSL 检查器都提到 SSL 已正确安装。

查看这张图片,这将更好地解释事情:

下面给出完整的.htaccess


Options +FollowSymlinks 
DirectoryIndex index.html Home.php index.php

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

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://{REQUEST_URI} [L,R=301]

RewriteRule ^(blogs)($|/) - [L]
RewriteRule ^(.*)/$ index.php?mod=resturants&name=$1&%{QUERY_STRING} [L]
RewriteRule ^$ Home.php [L]
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
</IfModule>

【问题讨论】:

  • https://{REQUEST_URI}
  • @hjpotter92 什么东西?请详细说一下,这玩意我还不够好。
  • 检查图片,如果这可以帮助你i.imgur.com/lOy65rs.jpg
  • 应该是https://%{HTTP_HOST}%{REQUEST_URI}
  • 不走运 :( 同样的问题。如果你有时间,请阅读下面我与 Rizwan Ranjha 的对话并检查此图片。网站在 IE 和 Safari 中无法运行,i.imgur.com/lOy65rs.jpg

标签: apache .htaccess mod-rewrite ssl no-www


【解决方案1】:

请注意,我的 SSL 证书是为 website.com 而不是为 www.website.com。

这是你的主要问题。如果没有www有效证书,您将永远能够从www 重定向到non www。原因是在 Web 服务器处理任何其他内容(包括任何重写规则)之前首先处理连接。因此,当您的浏览器使用 https 协议连接到您的站点时,它必须检查有效证书,因为这是 SSL 的本质,以确保连接安全。然后,一旦完成,Apache 将处理您已有的 Web 服务器规则,例如重写。所以在连接正确完成之前,它不能从 www 重写为非 www。为此,您还需要www 的证书。重写规则不是问题。

这个话题经常出现,没有办法绕过它。这就是 SSL/加密的本质及其工作原理。

购买证书时,尽量不要只购买域名,因为一些 CA 只会在没有 www 的情况下为您提供。但是,如果您在 CSR 中使用 www.example.com,您将在 99% 的时间在同一个证书中同时获得 www.example.comexample.com。那么你就不用担心这个问题了。它们是愚蠢的便宜,所以再买一个应该不是问题。 SSls.com 每年 4.99 年。

【讨论】:

  • 我已经要求 www.website.com 证书但是为什么 http : // www.website.com/http : // website.com/ 成功重定向到 https : // website.com?
【解决方案2】:

你试过了吗?

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

Generic htaccess redirect www to non-www

【讨论】:

  • 我在帖子中解释过的相同问题(错误)。 This Connection is Untrusted with https://www,domain.com/ 而它应该被重定向到domain.com
  • 您的 SSL 证书是否涵盖 www 和非 www 似乎比 SSL 不重定向的问题。
  • 不,SSL 仅涵盖 domain.com 而不是 www.domain.com,这就是我尝试将所有内容重定向到 domain.com 的原因
  • 嗨,我已经更新了答案,请再次检查并将其粘贴到 .htaccess 的开头
  • 不走运 :( 同样的问题。如果我可以在 httpd.conf 或 ssl.conf 中做些什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 2019-01-28
  • 1970-01-01
  • 2023-04-03
  • 2014-10-28
  • 2022-11-26
  • 1970-01-01
相关资源
最近更新 更多