RewriteCond 和 RewriteRule 工作正常,除非不使用路径

RewriteCond and RewriteRule work fine except when not using paths

我有一个新域,需要通过 Apache 中的代理加载旧域的内容。这已经可以正常工作了:

<VirtualHost myserver:80>
ServerName newdomain.com
ServerAlias www.newdomain.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^newdomain\.com$
RewriteRule ^(.*)$ https://olddomain.com/ [P]
</VirtualHost>

例如:

但是当我尝试这个时问题来了:

我猜想问题出在 RewriteCond / RewriteRule 定义中,但我似乎找不到问题所在。有任何想法吗?谢谢!

RewriteRule ^(.*)$ https://olddomain.com/ [P]

因为此规则是在 virtualhost 上下文中定义的,URL-path RewriteRule pattern 匹配项是相对于根的,并且以斜杠开头。由于这是在 substitution 字符串中捕获和使用的,因此它将在目标 URL-path.

的开头导致双斜杠

这可能会影响主页的路由。

请尝试以下操作:

RewriteRule ^/(.*)$ https://olddomain.com/ [P]

也不需要前面的 RewriteCond 指令,因为您已经在 newdomain.com 的 vHost 中并且当前 条件 省略了 www.newdomain.com,这大概不是本意。


或者根本不使用 mod_rewrite,因为它似乎是直接的一对一代理。

例如,改为使用以下内容。

ProxyPass / https://olddomain.com/
ProxyPassReverse / https://olddomain.com/