使用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