我有一个新域,需要通过Apache中的代理加载旧域的内容。这已经可以正常工作了:
<VirtualHost myserver:80>
ServerName newdomain.com
ServerAlias www.newdomain.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^newdomain.com$
RewriteRule ^(.*)$ https://olddomain.com/$1 [P]
</VirtualHost>
例如:
newdomain.com/contact
负载olddomain.com/contact
newdomain.com/catalogue/342
负载olddomain.com/catalogue/342
但是当我尝试这个时问题来了:
newdomain.com
(没有任何附加路径)。返回404错误。
我猜这个问题是在RewriteCond
/RewriteRule
定义,但我似乎找不到问题。什么好主意吗?谢谢!
RewriteRule ^(.*)$ https://olddomain.com/$1 [P]
因为该规则是在virtualhost上下文中定义的,所以RewriteRule
模式匹配的url路径是相对于根的,并且以斜杠开始。由于这是在替换字符串中捕获并使用的,因此它将在目标url -路径的开始处产生双斜杠。
也许这是抛弃了主页的路由。
试试下面的命令:
RewriteRule ^/(.*)$ https://olddomain.com/$1 [P]
也不需要前面的RewriteCond
指令,因为您已经在vHost中用于newdomain.com
,并且当前条件省略了www.newdomain.com
,这可能不是意图。
或者根本不要使用mod_rewrite,因为它似乎是一个直接的一对一代理。
例如:
ProxyPass / https://olddomain.com/
ProxyPassReverse / https://olddomain.com/