重定向指令是不是覆盖配置的别名

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 斜杠不需要/不需要在正则表达式中转义,所以你做错了。

以上是关于重定向指令是不是覆盖配置的别名的主要内容,如果未能解决你的问题,请参考以下文章

二十shell介绍命令历史命令补全和别名通配符输入输出重定向

Vue Router 重定向&别名

Shell编程Shell中Bash基本功能

Shell编程Shell中Bash基本功能

Vue路由重定向、别名与导航守卫

shell介绍历史命令命令补全和别名通配符输入输出重定向