重定向指令是不是覆盖配置的别名
Posted
技术标签:
【中文标题】重定向指令是不是覆盖配置的别名【英文标题】:Does the Redirect directive override configured Aliases重定向指令是否覆盖配置的别名 【发布时间】:2019-09-07 09:09:28 【问题描述】:我将 apache 2.4 (docker) 设置为反向代理,以将不同的子域分发到不同的 docker 服务。我使用 Redirect
指令将 http-requests 重定向到 https。但是,一个特定的 URL 路径(域之后的部分)不应该被重定向到 https,而是与来自特定目录的文件一起提供。我正在尝试使用 Alias
指令来完成此操作,但它不起作用。
我假设Redirect
会覆盖Alias
。真的吗?
如果是这种情况,我该如何实现我的目标?
<VirtualHost *:80>
ServerName service.example.com
Alias /exception/ /var/www/exception
Redirect permanent / https://service.example.com/
</VirtualHost>
我希望这会起作用,但它没有。
【问题讨论】:
但是你为什么不直接从那个 VirtualHost 中删除 Redirect 呢? 因为我希望将http请求重定向到https(为了安全和方便) 您的问题是:“但是,不应将一个特定域重定向到 https”,为什么不从该域的 VirtualHost 中删除仅重定向? 我的意思是域之后的部分,所以 service.example.com/exception 的 /exception 【参考方案1】:来自mod_alias docs:
首先,在处理别名之前处理所有重定向,并且 因此与 Redirect 或 RedirectMatch 匹配的请求将 从来没有应用别名。其次,别名和重定向是 按照它们在配置文件中出现的顺序进行处理,其中 第一场比赛优先。
要确保/exception/
不匹配,请使用允许正则表达式模式的RedirectMatch
:
RedirectMatch permanent "^/(?!exception/)(.*)" "https://service.example.com/$1"
【讨论】:
像魅力一样工作。但是我不得不像这样逃避正则表达式中的斜杠:\/
.
@robfuscator 斜杠不需要/不需要在正则表达式中转义,所以你做错了。以上是关于重定向指令是不是覆盖配置的别名的主要内容,如果未能解决你的问题,请参考以下文章