在我的apache服务器上,我希望能够为我的默认虚拟主机执行此操作而不指定 ServerName ,并且重定向可以使用请求URL中显示的任何服务器名称 . 我希望这样的事情:
ServerName
NameVirtualHost *:80 <VirtualHost *:80> RedirectPermanent / https://%{SERVER_NAME}/ ... </VirtualHost>
这可能是使用 Redirect 还是我必须求助于 Rewrite ?
Redirect
Rewrite
这是省略不需要的重定向的完整方法;)
这些规则旨在用于.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]
Eplanations :
RewriteEngine on
==>启用引擎
RewriteCond %{HTTPS} off [OR]
==>匹配 non-https 连接,或(不设置[OR]会导致隐式AND!)
RewriteCond %{HTTP:X-Forwarded-Proto} !https
==>匹配转发的连接(代理,负载均衡器等) without https
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]
==>如果两个条件中的一个匹配,则重写整个URL,发送301以使客户端“学习”(有些人做,有些人没有)和L用于最后一个规则 .
尝试在vhost配置中添加:
RewriteEngine On RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
两者都很好 . 但根据Apache docs,你应该避免使用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>
Redirect 之后的第一个 / 是网址,第二个部分是应该重定向的位置 .
/
您还可以使用它将URL重定向到子域: Redirect /one/ http://one.example.com/
Redirect /one/ http://one.example.com/
3 回答
这是省略不需要的重定向的完整方法;)
这些规则旨在用于.htaccess文件,因为*:80 VirtualHost条目中的RewriteRule不需要条件 .
Eplanations :
==>启用引擎
==>匹配 non-https 连接,或(不设置[OR]会导致隐式AND!)
==>匹配转发的连接(代理,负载均衡器等) without https
==>如果两个条件中的一个匹配,则重写整个URL,发送301以使客户端“学习”(有些人做,有些人没有)和L用于最后一个规则 .
尝试在vhost配置中添加:
两者都很好 . 但根据Apache docs,你应该避免使用mod_rewrite进行简单的重定向,而是使用Redirect代替 . 所以根据他们的说法,你最好这样做:
Redirect
之后的第一个/
是网址,第二个部分是应该重定向的位置 .您还可以使用它将URL重定向到子域:
Redirect /one/ http://one.example.com/