【发布时间】:2018-05-25 00:10:49
【问题描述】:
我正在尝试创建一个 VirtualHost 配置来测试客户端如何处理对同一服务器子路径的不同重定向。并且还要保持足够的灵活性,以便在将来包含更多的状态代码(例如 307、308...)。
此外,一个理想的功能是重用此配置,而不管它应用的主机名是什么(即重定向都到相同的主机名但在不同的端口/子路径中)。所以 Apache Redirects 指令可能不会成功。
我的第一个想法是创建单独的 2 个独立的 VirtualHosts,根据我想要测试的结果 HTTP 代码在 2 个不同的接口中侦听并为其包含 RewriteRules:
Listen 301
Listen 302
<VirtualHost *:301>
RewriteEngine On
RewriteRule ^(.*)$ $1 [R=301,L]
</VirtualHost>
<VirtualHost *:302>
RewriteEngine On
RewriteRule ^(.*)$ $1 [R=302,L]
</VirtualHost>
<VirtualHost *:80>
[...]
</VirtualHost>
问题是端口号。 (即 301、302)也最终成为重定向 URL 的一部分,因此不会发生有效的重定向。我什至尝试将端口留在正则表达式组之外:^(.*):302$ 没有运气。
【问题讨论】:
-
有点不清楚您要达到的目标。您能否举例说明在浏览器地址栏中输入的确切网址以及所需的目标网址。
-
@DusanBajic 是的;抱歉,如果我一开始不清楚。基本上,我希望
http://<server>:301/whatever使用 301 代码重定向到http://<server>/whatever并使用永久重定向将http://<server>:302/whatever重定向到http://<server>/whatever(保留路径并删除端口号。)
标签: apache redirect mod-rewrite virtualhost