我在Tomcat 7面前有Apache 2.4(尽管我认为前者在这里很重要)。 我需要将域上的所有请求重定向到HTTPS端口,而不是那些转到特定文件夹的请求:
(1) http://www.example.com/ -> https://www.example.com/
(2) http://www.example.com/products -> https://www.example.com/products
(3) http://www.example.com/... -> https://www.example.com/...
,而
(4) http://www.example.com/services should pass straight
(5) http://www.example.com/services/main should pass straight
(6) http://www.example.com/services/main/list?params should pass straight
如何在不使用mod_rewrite
的情况下完成此操作(正如我在其他问题中发现的那样)?
我在文档中看到重定向是使用Redirect和RedirectMatch指令处理的。
所以我可以用:
来处理1,2,3<VirtualHost *:80>
...
ServerName www.example.com
Redirect / https://www.example.com
</VirtualHost>
但是我不能写一个正则表达式来处理其他三个。我在this answer中发现我可以使用负面外观,但像/(?!services).*
这样的正则表达式只匹配4(至少根据Regex Tester on
修改
我已经指定这可以在没有mod_rewrite
的情况下完成。
答案 0 :(得分:6)
在此处使用基于正则表达式的重定向规则:
<VirtualHost *:80>
...
ServerName www.example.com
RedirectMatch 301 ^/((?!services).*)$ https://www.example.com/$1
</VirtualHost>
除了以(?!services)
开头的网址之外, /services
是一个负面预测