gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:03:15 26 4
gpt4 key购买 nike

我必须将我的网站从 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>

最佳答案

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

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

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

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

关于apache - WWW 到 NON WWW Urls(删除 WWW)使用 Apache (.htaccess),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33039666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com