我正在尝试将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}
以上两种尝试都失败了。有什么建议吗?
答案 0 :(得分:97)
尝试2接近完美。只需稍微修改一下:
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
答案 1 :(得分:29)
但是,如果您的网站没有安全证书,则它位于共享托管环境中,并且您不希望在通过https请求您的网站时收到“警告”,您无法使用htaccess的。原因是警告消息在请求甚至进入htaccess文件之前被触发,因此您必须在服务器上修复它。转到/etc/httpd/conf.d/ssl.conf并注释掉有关虚拟服务器443的部分。但可能性是您的托管服务提供商不会给您那么多控制权。因此,您必须移动到其他主机或购买SSL,以便在您的htaccess有机会重定向之前不会触发警告。
答案 2 :(得分:8)
RewriteEngine On
RewriteCond %{SERVER_PORT} 443
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
答案 3 :(得分:8)
您可以使用以下规则从 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。
$ 1是RewriteRule模式中的正则表达式的一部分,它包含在(。+)中捕获的任何值,在这种情况下,它会捕获域名后面的完整request_uri内容。
[NC,L,R]是标志,NC使uri案例敏感,您可以在请求中使用大写或小写字母。
L标志告诉服务器在currunt规则匹配时停止处理其他规则,当你在块中有更多的规则时,使用L标志来避免规则冲突是很重要的。
R标志用于进行外部重定向。
答案 4 :(得分:3)
http和https之间的区别在于https请求是通过ssl加密连接发送的。在浏览器发送http请求之前,必须在浏览器和服务器之间建立ssl加密连接。
Https请求实际上是通过ssl加密连接发送的http请求。如果服务器拒绝建立ssl加密连接,则浏览器将没有连接来发送请求。浏览器和服务器无法相互通信。浏览器将无法发送它想要访问的网址,服务器将无法通过重定向到另一个网址进行响应。
所以这是不可能的。如果您想回复https链接,那么您需要一个ssl证书。
答案 5 :(得分:1)
declare @d datetime = getdate()
select @d=cast(cast(DATEPART(yy,@d) as varchar)+'-'+ cast(datepart(mm,@d) as varchar)+'-01' as datetime) --first day of current month
;with acct as (
select ROW_NUMBER() over(partition by AcctNum order by LoadDate desc) rn,
AcctNum, Name, Balance, Status, LoadDate
from Accts
where status=1 and LoadDate < @d
)
select AcctNum, Name, Balance, Status, LoadDate
from acct
where rn=1
答案 6 :(得分:0)
您的代码是正确的。只需将它们放在<VirtualHost *:443>
示例:
<VirtualHost *:443>
SSLEnable
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>