ssc*_*ssc 330
在Apache的文档建议不要使用重写:
要将
http
URL 重定向到https
,请执行以下操作:Run Code Online (Sandbox Code Playgroud)<VirtualHost *:80> ServerName www.example.com Redirect / https://www.example.com/ </VirtualHost> <VirtualHost *:443> ServerName www.example.com # ... SSL configuration goes here </VirtualHost>
该段应进入主服务器配置文件,不进.htaccess
如问的问题.
这篇文章可能只是在提出问题并得到回答后提出,但似乎是目前的方法.
Ree*_*ore 293
更新:虽然几年前这个答案已被接受,但请注意,Apache文档现在建议不要使用它的方法.请Redirect
改用.看到这个答案.
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)
Dav*_*vid 136
我建议使用301重定向:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Run Code Online (Sandbox Code Playgroud)
Bru*_*uno 35
正如我在这个问题中所说,我建议你不要盲目地将所有HTTP请求重定向到他们的HTTPS等价物,因为它可能会给你一个错误的安全印象.相反,您应该将HTTP站点的"根"重定向到HTTPS站点的根目录,并从那里链接到HTTPS.
问题是,如果HTTPS站点上的某些链接或表单使客户端向HTTP站点发送请求,则在重定向之前,其内容将是可见的.
例如,如果通过HTTPS提供的某个页面有一个表单<form action="http://example.com/doSomething">
并且发送了一些不应该以明文形式发送的数据,则浏览器将首先将完整请求(包括实体,如果它是POST)发送到HTTP站点第一.重定向将立即发送到浏览器,并且由于大量用户禁用或忽略警告,因此可能会被忽略.
当然,提供应该连接到HTTPS站点但最终用于HTTP站点的链接的错误可能会在您使用与HTTPS站点相同的IP地址上的HTTP端口上侦听某些内容时导致问题.但是,我认为将两个站点保持为"镜像"只会增加出错的可能性,因为您可能倾向于假设它会通过将用户重定向到HTTPS来自动纠正自身,而这通常为时已晚.(这个问题也有类似的讨论.)
小智 18
我发现https和www在域上的最佳方式是
RewriteCond %{HTTPS} off
RewriteCond %{HTTPS_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)
Tim*_*ene 14
这是它工作的html重定向方法,但不是最好的.
<meta http-equiv="Refresh" content="0;URL=https://www.example.com" />
Run Code Online (Sandbox Code Playgroud)
PHP方法
<?php
function redirectTohttps() {
if ($_SERVER['HTTPS']!="on") {
$redirect= "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
header("Location:$redirect");
}
}
?>
Run Code Online (Sandbox Code Playgroud)
.htaccess approch
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)
复制自: www.letuslook.org
我喜欢这种从http重定向到https的方法.因为我不需要为每个站点编辑它.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
Run Code Online (Sandbox Code Playgroud)
使用.htaccess文件中的以下代码会自动将访问者重定向到您网站的HTTPS版本:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Run Code Online (Sandbox Code Playgroud)
如果您有一个.htaccess文件:
不要复制RewriteEngine On.
确保以RewriteCond和RewriteRule开头的行紧跟现有的RewriteEngine On.
根据GoDaddy.com,这是使用.htaccess将HTTP重定向到HTTPS的正确方法.第一行代码是不言自明的.第二行代码检查HTTPS是否已关闭,如果是,则通过运行第三行代码将HTTP重定向到HTTPS,否则将忽略第三行代码.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Run Code Online (Sandbox Code Playgroud)
https://www.godaddy.com/help/redirect-http-to-https-automatically-8828
最佳解决方案取决于您的要求.这是先前发布的答案的摘要,其中添加了一些上下文.
如果您使用Apache Web服务器并可以更改其配置,请遵循Apache文档:
<VirtualHost *:80>
ServerName www.example.com
Redirect "/" "https://www.example.com/"
</VirtualHost>
<VirtualHost *:443>
ServerName www.example.com
# ... SSL configuration goes here
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
但是你也问过你是否可以在.htaccess
文件中做到这一点.在这种情况下,您可以使用Apache的RewriteEngine:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]
Run Code Online (Sandbox Code Playgroud)
如果一切正常并且您希望浏览器记住此重定向,则可以通过将最后一行更改为:来将其声明为永久性:
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Run Code Online (Sandbox Code Playgroud)
但是如果你可以改变这种重定向的想法,请小心.浏览器会记住它很长时间,并且不会检查它是否发生了变化.
您可能不需要第一行,RewriteEngine On
具体取决于Web服务器配置.
如果您寻找PHP解决方案,请查看$ _SERVER数组和标头函数:
if (!$_SERVER['HTTPS']) {
header("Location: https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
561007 次 |
最近记录: |