使用htaccess httpredirect

我正在尝试将https://www.example.comredirect到http://www.example.com 。 我在.htaccess文件中试过下面的代码

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

此代码成功将https://example.comredirect到http://www.example.com 。 但是,当我inputhttps://www.example.com,然后在浏览器中给我一个“网页不可用”的错误。

我也尝试了以下两个代码没有成功

尝试1

 RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^/(.*):NOSSL$ http://www.example.com/$1 [R=301,L] 

尝试2

 RewriteEngine On RewriteCond %{HTTPS} on RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} 

上述两次尝试失败。 有什么build议么?

尝试2接近完美。 只需稍微修改一下:

 RewriteEngine On RewriteCond %{HTTPS} on RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

但是,如果您的网站没有安全证书,它位于共享主机环境中,并且您不希望在通过https请求您的网站时收到“警告”,则无法使用htaccessredirect。 原因是警告消息在请求甚至到达htaccess文件之前被触发,所以你必须在服务器上修复它。 去/etc/httpd/conf.d/ssl.conf注释掉虚拟服务器443的部分。但是可能性是你的托pipe服务提供商不会给你太多的控制。 所以你不得不移动到不同的主机或购买SSL只是这样的警告不会触发之前你的htaccess有机会redirect。

 RewriteEngine On RewriteCond %{SERVER_PORT} 443 RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

您可以使用以下规则从httpsredirect到http

  RewriteEngine On RewriteCond %{HTTPS} ^on$ RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R] 

说明:

 RewriteCond %{HTTPS} ^on$ 

检查HTTPS是否打开 (请求使用https)

然后

 RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R] 

将任何请求( https://example.com/foo )redirect http://example.com/foo

  • $ 1是RewriteRule模式中的正则expression式的一部分,它包含在(。+)中捕获的任何值,在这种情况下,它捕获完整的request_uri域名后的所有内容。

  • [NC,L,R]是标志,NC使得uri大小写敏感,您可以在请求中使用大写或小写字母。

如果currunt规则匹配,则L标志告诉服务器停止执行其他规则,因此,当您有更多的规则在块中时,使用L标志来避免规则冲突是很重要的。

R标志用于进行外部redirect。

http和https之间的区别在于https请求是通过sslencryption的连接发送的。 在浏览器发送http请求之前,必须在浏览器和服务器之间build立sslencryption的连接。

Https请求实际上是通过SSLencryption连接发送的http请求。 如果服务器拒绝build立sslencryption连接,则浏览器将无法连接发送请求。 浏览器和服务器将无法相互交谈。 浏览器将无法发送它想要访问的url,服务器将无法响应redirect到另一个url。

所以这是不可能的。 如果你想回应https链接,那么你需要一个ssl证书。

你的代码是正确的。 把它们放在<VirtualHost *:443>

例:

 <VirtualHost *:443> SSLEnable RewriteEngine On RewriteCond %{HTTPS} on RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} </VirtualHost> 
 RewriteCond %{HTTP:X-Forwarded-Proto} =https