1

我有一个 WordPress 网站,我需要重写一些页面的 URL,以表明它们来自特定的子域以匹配现有的打印件。我正在尝试通过 htaccess 和 mod_proxy 执行此操作,并且正在接近,但需要一些帮助。

这是我现在拥有的代码,它有点工作:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^subdomain\.domain\.edu$ [NC]
RewriteRule ^ http://othersubdomain.domain.edu/folder1/folder2/folder3%{REQUEST_URI} [L,P]

如果我输入 subdomain.domain.edu,我会得到正确的页面(位于http://othersubdomain.domain.edu/folder1/folder2/folder3)并且浏览器 URL 保持写为 subdomain.domain.edu。这很好用!

问题在于内页。例如,如果我输入 subdomain.domain.edu/contact,我会被重定向到正确的页面,但 URL 不会保持重写,它会显示提供服务的完整 URL。

有人可以帮我重写内页的 URL 吗?我觉得我很接近!

4

1 回答 1

2

好吧,您主要不是在这里使用 mod_proxy。您正在使用 mod_rewrite 的代理标志。至少,您需要使用ProxyPassReverse来确保 URL 保持不变。

此外,您的用例中不建议使用 mod_rewrite。您的后端服务器返回的页面可能嵌入了直接引用 othersubdomain.domain.edu 的绝对 URL。您应该使用 mod_proxy 的 ProxyPass 或 ProxyPassMatch 以及 mod_proxy_html。如果您仍然无法弄清楚,请在评论中告诉我。

更新

首先,花点时间坐下来阅读有关 mod_proxy 的完整文档。它是最强大的 apache 模块之一,深入学习它会有很长的路要走。其次,不要为此使用 .htaccess。

我假设您为您的特定子域配置了一个虚拟主机。如果没有,您应该先配置它。现在,在您的虚拟主机配置中,添加以下行:

<VirtualHost *:80>
    ServerName subdomain.domain.edu

    ProxyPass         / http://othersubdomain.domain.edu/folder1/folder2/folder3/
    ProxyPassReverse  / http://othersubdomain.domain.edu/folder1/folder2/folder3/
    ProxyPassReverseCookieDomain  othersubdomain.domain.edu subdomain.domain.edu
    ProxyPassReverseCookiePath  /folder1/folder2/folder3/  /
</VirtualHost>

上述配置指令将对http://subdomain.domain.edu/foo/bar的请求代理到http://othersubdomain.domain.edu/folder1/folder2/folder3/foo/bar。当响应可用时,它的标头将被更改,以便用户可以看到它是从 subdomain.domain.edu 生成的。如果您的后端服务器生成任何 cookie(例如,如果用户必须登录),则需要 Cookie 指令。

这将带你走很长的路。之后,如果您想更改页面内容、嵌入式样式表或 javascript 中的链接,您应该参考mod_proxy_html的文档。

于 2013-11-15T05:24:59.770 回答