我必须将我的网站从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>
答案 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.com
和example.com
。然后你不必担心这个问题。它们是愚蠢的便宜所以不应该成为另一个问题。 SSls.com以4.99 /年的速度拥有它们。
答案 1 :(得分:-1)
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)
RewriteRule ^.*$ https://%1/$1 [R=301,L]