Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Apache(.htaccess)将WWW连接到非WWW URL(删除WWW)_Apache_.htaccess_Mod Rewrite_Ssl_No Www - Fatal编程技术网

使用Apache(.htaccess)将WWW连接到非WWW URL(删除WWW)

使用Apache(.htaccess)将WWW连接到非WWW URL(删除WWW),apache,.htaccess,mod-rewrite,ssl,no-www,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://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

Apache2.4.6(CentOS)OpenSSL/1.0.1e-fips PHP/5.5.29

Hostname:Portexample.com:443

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

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

完整的
.htaccess
如下所示:


Options+FollowSymlinks
DirectoryIndex.html Home.php index.php
重新启动发动机
重写基/
重写cond%{HTTP_HOST}^www\(.*)
重写规则^.*$https://%1/$1[R=301,L]
重写条件%{HTTPS}关闭
重写规则^(.*)$https://{REQUEST_URI}[L,R=301]
重写规则^(博客)(元/)-[L]
重写规则^(.*)/$index.php?mod=resturants&name=$1&%{QUERY\u STRING}[L]
重写规则^$Home.php[L]
重写条件%{REQUEST_URI}/+[^\.]+$
重写规则^(+[^/])$%{REQUEST_URI}/[R=301,L]
你试过这个吗

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

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

这是你的主要问题。如果没有
www
有效证书,您将永远无法从
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英镑。

https://{REQUEST\u URI}
@hjpotter92什么东西?请详细说明,我对这些东西做得不够好。检查图片,如果这对你有帮助,应该是
https://{HTTP_HOST}%{REQUEST_URI}
No luck:(同样的问题。如果你有时间,请阅读下面我与Rizwan Ranjha的对话并检查此图片。网站在IE和Safari中不起作用,I.imgur.com/lOy65rs.jpgSame问题(错误)这是我在帖子中解释的。这个连接不受https://www,domain.com/信任,但它应该被重定向到。你的SSL证书是否覆盖了www和非www,因为它似乎比它的SSL问题不重定向。不,SSL只覆盖domain.com而不覆盖www.domain.com,这就是我尝试将所有内容重定向到d的原因omain.comHi,我已经更新了答案,请再次检查并将其粘贴到.htaccessNo luck:(相同的问题。如果在httpd.conf或ssl.conf中有什么我可以做的吗?我要求提供www.website.com证书,但为什么http://www.website.com/和http://website.com/成功重定向到https://website.com?
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)
RewriteRule ^.*$ https://%1/$1 [R=301,L]