WWW 到 NON WWW Urls(删除 WWW)使用 Apache (.htaccess)

WWW to NON WWW Urls (Remove WWW) using Apache (.htaccess)

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

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

我正在使用 Apache 并且必须使用 Apachehttpd.conf/ssl.conf.htaccess

我已经使用了几乎所有我能搜索到的方法,但是 none 对我有用。

但是

它给了我 "invalid certificate error",当我在浏览器中添加一个例外(接受证书)然后它重定向到 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/ [L,R=301]

也用过这个,但运气不好

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

这个也不走运

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

我尝试了 5-6 种其他解决方案(与上述类似),但 none 有效。所有适用于我上面提到的前两个模式,但 none 适用于 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/ [R=301,L]

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

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

你试过了吗?

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

Generic htaccess redirect www to non-www

Please note that my SSL certificate is issued for website.com and not www.website.com.

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

这个话题经常出现,没办法绕过。这就是 SSL/encryption 的本质及其运作方式。

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