使用htaccess Https到http重定向

Ans*_*nsh 66 apache .htaccess https http

我正在尝试将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]
Run Code Online (Sandbox Code Playgroud)

此代码成功将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]
Run Code Online (Sandbox Code Playgroud)

尝试2

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)

以上两种尝试均失败.有什么建议?

ark*_*cha 101

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

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

  • 如果你不想制作_permanent_,那么使用`R = 302`会很好.当我的SSL过期时,这让我陷入困境,我想在经历痛苦的​​续订程序之前暂时回到`http`. (9认同)

小智 34

但是,如果您的网站没有安全证书,则它位于共享托管环境中,并且您不希望在通过https请求您的网站时收到"警告",您无法使用htaccess重定向它.原因是警告消息在请求甚至进入htaccess文件之前被触发,因此您必须在服务器上修复它.转到/etc/httpd/conf.d/ssl.conf并注释掉有关虚拟服务器443的部分.但可能性是您的托管服务提供商不会给您那么多控制权.因此,您必须移动到其他主机或购买SSL,以便在您的htaccess有机会重定向之前不会触发警告.

  • 感谢您的回答。由于我们现有的站点没有SSL证书,因此无论我的.htaccess多么正确,它都无法正常工作。 (2认同)

sta*_*een 10

您可以使用以下规则从https重定向到http:

 RewriteEngine On


RewriteCond %{HTTPS} ^on$
RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R]
Run Code Online (Sandbox Code Playgroud)

说明:

RewriteCond %{HTTPS} ^on$
Run Code Online (Sandbox Code Playgroud)

检查HTTPS是否已启用(使用https发出请求)

然后

RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R]
Run Code Online (Sandbox Code Playgroud)

将任何请求(https://example.com/foo) 重定向 http://example.com/foo.

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

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

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

R标志用于进行外部重定向.


小智 9

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