我试图重定向https://www.example.com到http://www.example.com 。 我尝试在.htaccess文件中下面的代码
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
此代码成功地重定向https://example.com到http://www.example.com 。 然而,当我输入https://www.example.com那么它给了我一个“找不到网页”的错误在浏览器中。
我也曾尝试以下2码没有成功
尝试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}
上述两个尝试失败。 有什么建议?
尝试2是接近完美。 只是修改它稍微:
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
但是,如果你的网站没有安全证书,它是一个共享的主机环境,你不想要得到的“警告”,当通过HTTPS被请求你的网站,你可以不使用它重定向htaccess的。 其原因是,警告消息被触发的请求,甚至经过的htaccess文件之前,所以你要修复它在服务器上。 转到/etc/httpd/conf.d/ssl.conf并注释掉部分关于虚拟服务器443但赔率是,你的托管服务提供商不会给你那么多的控制。 所以,你就必须要么移动到不同的主机或购买SSL只是这样的警告不会触发之前,你的htaccess有机会重定向。
RewriteEngine On
RewriteCond %{SERVER_PORT} 443
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
您可以使用以下规则来重定向从HTTPS到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 ) 至 http://example.com/foo 。
-l标志告诉服务器停止等待处理其他规则,如果currunt规则已匹配,使用了L位,以避免冲突的规则,当你有更多然后在一个块规则是很重要的。
R标志是用来制造一个外部重定向。
HTTP和HTTPS之间的区别是,HTTPS请求通过SSL加密的连接发送。 SSL加密的连接必须在浏览器和服务器之间的浏览器发送的HTTP请求之前被建立。
HTTPS请求是在将通过SSL加密连接发送的事实的http请求。 如果服务器拒绝建立SSL加密连接,那么浏览器将没有连接在发送请求。 浏览器和服务器将不相互交谈的方式。 该浏览器将无法发送,它希望访问,服务器将无法使用重定向到另一个网址作出反应的URL。
所以这是不可能的。 如果你想使用https链接响应,那么你就需要一个SSL证书。
RewriteCond %{HTTP:X-Forwarded-Proto} =https
你的代码是正确的。 只要把它们里面<VirtualHost *:443>
例:
<VirtualHost *:443>
SSLEnable
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>