Apache VirtualHosts - 从 URL 重定向中排除单个文件
Posted
技术标签:
【中文标题】Apache VirtualHosts - 从 URL 重定向中排除单个文件【英文标题】:Apache VirtualHosts - Exclude a single file from URL redirect 【发布时间】:2014-01-26 04:39:03 【问题描述】:我目前正在将所有请求从 olddomain.com
重定向到我的 Apache 服务器到 newdomain.com
-- 它工作正常,但我实际上只需要一个文件来加载,就好像它位于 olddomain.com
一样。
这是重要的部分现在的样子:
<VirtualHost *:80>
ServerName olddomain.com
ServerAlias olddomain.com
Redirect / http://newdomain.com/
</VirtualHost>
我喜欢这个简单的Redirect / http://newdomain.com
解决方案,因为它完全符合我的要求,而且非常简单,甚至我都能理解!但是我该如何例外,以便当某人/某事转到http://olddomain.com/excludedfile.php
时,它会加载到预期的域名?到目前为止,我发现的解决方案似乎适用于 mod_rewrite 设置。如果 mod_rewrite 是必需的,我想我可以忍受它,但我宁愿不...
我为什么需要这个:我刚刚向 Apple 提交了我的应用程序,并在最后一刻决定我需要更改域名,这破坏了应用程序的一个功能,因为它明确依赖于查看旧域名——由于对我的虚拟主机文件所做的更改,它不再看到它。
【问题讨论】:
【参考方案1】:您需要使用RedirectMatch
来获得正则表达式功能:
RedirectMatch 301 ^((?!.*?excludedfile\.php).*)$ http://newdomain.com$1
此更改将要求您重新启动 Apache。
【讨论】:
你确定吗?我用这个替换了我的Redirect
行,现在所有内容都重定向到主页(http://newdomain.com/
- 斜线后没有任何内容)。
是的,有错字,尝试更新规则并重新启动。
奇怪 - 现在当我转到 http://olddomain.com/excludedfile.php
时,我得到一个 404 错误...尝试加载 http://olddomain.com
下的任何其他位置会导致文件名前有一个额外的 // - http://olddomain.com/otherfile.php
变成http://newdomain.com//otherfile.php
...
进行了另一个更新,将修复双重//
问题,您可以看到它现在没有重定向http://olddomain.com/excludedfile.php
。
对于未来的访问者:上面的代码是完美的 - 双斜杠问题和 404 错误是因为我以前的错误重定向代码和我的服务器需要自定义 DocumentRoot。以上是关于Apache VirtualHosts - 从 URL 重定向中排除单个文件的主要内容,如果未能解决你的问题,请参考以下文章
Apache 2.2 localhost VirtualHosts 问题
未找到 Apache 2.2 VirtualHosts URL
apache virtualhosts配置问题导致404或测试页面
VirtualHosts 在 Mac OS 10.7 上不起作用