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>
例如:
newdomain.com/contact
加载 olddomain.com/contact
newdomain.com/catalogue/342
加载 olddomain.com/catalogue/342
但是当我尝试这个时问题来了:
newdomain.com
(没有任何附加路径)。结果是 404 错误。
我猜想问题出在 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/
我有一个新域,需要通过 Apache 中的代理加载旧域的内容。这已经可以正常工作了:
<VirtualHost myserver:80>
ServerName newdomain.com
ServerAlias www.newdomain.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^newdomain\.com$
RewriteRule ^(.*)$ https://olddomain.com/ [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/ [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/