【发布时间】:2014-06-02 04:52:48
【问题描述】:
我在运行 Apache 的共享 Web 主机上有 example1.com。它有一个目录 example1.com/foo。我现在希望 example2.com 提供来自 example1.com/foo 的相同内容,除了在 example2.com 根目录中没有 URL 中的中间目录。像 example2.com/bar.html 应该提供与 example1.com/foo/bar.html 相同的内容。
RewriteEngine on
RewriteCond %{HTTP_HOST} example2.com$ [NC]
RewriteRule ^(.*)$ foo/$1 [NC]
这个简单的重写规则接受任何针对 example2.com 的请求,并插入 foo/ 以指向该目录中的内容。问题是这一直在进行外部 301 重定向。我不希望这样,我希望浏览器停留在 example2.com 上而不进行重定向,而 Apache 从文件系统中的 /foo 提供内容。
多次查看 Apache mod_rewrite 文档,其中说明了如何使用 [R] 标志强制 301 重定向,但没有说明如何强制它不发生。我在这里想念什么?它在我的 Linux 共享主机和在 Windows 上使用 Apache 进行的本地测试上表现相同。
谢谢!
【问题讨论】:
-
两个域的 DocumentRoot 是否相同?
-
是的。我无法在共享虚拟主机上更改它。
-
实际上,我现在看到我真正想做的是让 DocumentRoot 对于两个不同的域表现不同。不过,我无法更改共享 Web 主机上的服务器配置。是否可以通过基于 http_host 的 .htaccess 中的 mod_rewrite 规则重新映射 DocumentRoot?我对此表示怀疑,因为 Apache 需要 DocumentRoot 已经设置为首先找到 .htaccess。
标签: apache .htaccess mod-rewrite redirect