我可以使用 Apache 变量和 mod_alias 的“Redirect”,而不是使用 mod_rewrite 吗?

我可以使用 Apache 变量和 mod_alias 的“Redirect”,而不是使用 mod_rewrite 吗?

Apache HTTP 服务器mod_alias提供了Redirect非常适合简单重定向的指令,如下所示:

# Redirect login to https
Redirect permanent /login https://www.example.org/login

虽然许多管理员使用mod_rewrite重定向,但 Apache 文档何时不使用 mod_rewrite建议一般来说,mod_alias比 更受欢迎mod_rewrite。我更喜欢使用mod_alias

我可以Redirect使用阿帕奇变量比如ServerName?例如,为了强制某些内容仅通过 HTTPS 提供,我需要执行以下操作:

Redirect permanent /login https://%{SERVER_NAME}/login
Redirect permanent /special-project-1 https://%{SERVER_NAME}/special-project-1
Redirect permanent /special-project-2 https://%{SERVER_NAME}/special-project-2

这些都不起作用,并且文字字符串%{SERVER_NAME}会打印在响应中:

host% curl http://www.example.org/login
...
302 Found
The document has moved <a href="https://%{SERVER_NAME}/login">here</a>.

Apache 变量是否允许与mod_alias指令一起使用?变量是否可以使用不同的语法?

答案1

有点晚了,但在查找这个问题的过程中偶然发现了这个线程并找到了解决方案。

使用 Apache 2.4 您无法执行以下操作:

Redirect permanent /login https://%{SERVER_NAME}/login

但你可以这样做:

<Location /login>
  Redirect permanent https://%{HTTP_HOST}/login
</Location>

答案2

我相信这里可以回答类似的问题: https://serverfault.com/a/415796/337307

@shanemadden写道:

你不能。Redirect 能够处理简单的重定向,即将客户端发送到单个特定名称,但无法进行复杂的替换(撇开 %{HTTP_HOST} 是 mod_rewrite 特定的事实)。

坚持使用 mod_rewrite。mod_alias 无法满足您的需要。

相关内容