hig*_*ted 68 apache https redirect http
在我的apache服务器上,我希望能够将所有传入的http请求重定向到等效的https请求.问题是,我希望能够为我的默认虚拟主机执行此操作,而无需指定,ServerName并且重定向可以使用请求URL中显示的任何服务器名称.我希望这样的事情:
NameVirtualHost *:80
<VirtualHost *:80>
RedirectPermanent / https://%{SERVER_NAME}/
...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
这可能是使用Redirect还是我必须诉诸Rewrite?
Jon*_*Lin 100
尝试在vhost配置中添加:
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
ors*_*zky 83
两者都很好.但是根据Apache文档,你应该避免使用mod_rewrite简单的重定向,Redirect而是使用它.所以根据他们的说法,你最好这样做:
<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)
第一/后Redirect是URL,第二部分是,它应该被重定向.
您还可以使用它将URL重定向到子域:
Redirect /one/ http://one.example.com/
Jim*_*ing 35
这是省略不需要的重定向的完整方法;)
这些规则旨在用于.htaccess文件,因为*:80 VirtualHost条目中的RewriteRule不需要条件.
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]
Run Code Online (Sandbox Code Playgroud)
Eplanations:
RewriteEngine on
Run Code Online (Sandbox Code Playgroud)
==>启用引擎
RewriteCond %{HTTPS} off [OR]
Run Code Online (Sandbox Code Playgroud)
==>匹配非https连接,或(不设置[OR]会导致隐式AND!)
RewriteCond %{HTTP:X-Forwarded-Proto} !https
Run Code Online (Sandbox Code Playgroud)
==>在没有 https的情况下匹配转发的连接(代理,负载均衡器等)
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]
Run Code Online (Sandbox Code Playgroud)
==>如果两个条件中的一个匹配,则重写整个URL,发送301以使客户端"学习"(有些人做,有些人没有)和L用于最后一个规则.
| 归档时间: |
|
| 查看次数: |
158407 次 |
| 最近记录: |