WWW到非WWW网址(删除WWW)使用Apache(.htaccess)

时间:2015-10-09 13:33:56

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

我必须将我的网站从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是正确的安装。

检查此图片,这将更好地解释:

Browsers reporting SSL cert error

完整.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>

2 个答案:

答案 0 :(得分:2)

  

请注意,我的SSL证书是针对website.com颁发的,而不是   www.website.com。

这是你的主要问题。如果没有www有效证书,您从不将能够从non www重定向到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 /年的速度拥有它们。

答案 1 :(得分:-1)

你尝试过这个吗?

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

Generic htaccess redirect www to non-www