我正在尝试使用 mod_rewrite 将用户重定向到 HTTPS 等效 URL,除非该 URL 用于我的 Jenkins CI 服务器。这是我在默认站点配置中的规则(我的 Jenkins 和其他站点有各自的VirtualHost
条目:
<VirtualHost _default_:80>
ServerAdmin [email protected]
RewriteEngine on
ReWriteCond %{SERVER_PORT} !^443$
ReWriteCond %{REQUEST_URI} !^.+/jenkins/(.*)$
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
</VirtualHost>
任何帮助将不胜感激。
编辑:根据要求,这是来自的输出apache2ctl -S
:
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:443 is a NameVirtualHost
default server ip-10-72-226-167.ec2.internal (/etc/apache2/sites-enabled/default-ssl:2)
port 443 namevhost ip-10-72-226-167.ec2.internal (/etc/apache2/sites-enabled/default-ssl:2)
port 443 namevhost qa.example.com (/etc/apache2/sites-enabled/example-ssl:2)
*:80 is a NameVirtualHost
default server ip-10-72-226-167.ec2.internal (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost ip-10-72-226-167.ec2.internal (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost qa.example.com (/etc/apache2/sites-enabled/jenkins:1)
Syntax OK
我期望的是,当我浏览到时http://qa.example.com
,我会被重定向到https://qa.example.com/
,但是如果我浏览到,http://qa.example.com/jenkins/
那么我的 Jenkins 配置就会启动。后者有效,但前者无效,即浏览到http://qa.example.com/
不会将我重定向到https://qa.example.com/
.
不要将这些规则放在
_default_
虚拟主机中,而是将它们放在/etc/apache2/sites-enabled/jenkins
虚拟主机中,以便它可以处理已映射到该名称的请求。另外 - 你的第二个表达式
RewriteRule
永远不会匹配/jenkins/
,因为它在前导斜杠之前至少需要一个字符。尝试这个: