我正在尝试将网站的一部分移至外部服务器。我希望此部分可通过子域访问,同时仍能应用 RewriteRules(无论是通过 .htaccess 还是 Apache2-.conf 文件完成,任何方法对我来说都是可以接受的)
我有:
Server1 with IP 1.1.1.1 and DNS entry "domain1.com"
Server2 with IP 2.2.2.2 and no DNS entry
The target directory on Server2 is "/var/www/html/sub1/"
每当有人请求“sub1.domain1.com”之类的内容时,它都应被代理/重定向到“2.2.2.2/sub1/”。所有其他子域都应保留在 Server1 上。
因此我首先在 Server1 上定义一个 VirtualHosts 条目:
<VirtualHost sub1.domain1.com:80>
ServerName sub1.domain1.com
ProxyPass / http://2.2.2.2/sub1/
ProxyPassReverse / http://2.2.2.2/sub1/
</VirtualHost>
并且这可以将通过“sub1.domain1.com”请求的任何内容重定向到 Server2 的 DocumentRoot“/var/www/html/sub1/”(虽然我不知道它如何知道这是 DocumentRoot - 我没有定义它)但我的 .htaccess 规则停止工作。
在 Server1 上我有一个 .htaccess 文件,内容如下:
RewriteEngine on
RewriteBase /sub1
RewriteRule ^aaa$ aaa.php?$1 [QSA,L]
RewriteRule ^bbb$ bbb.php?$1 [QSA,L]
RewriteRule ^ccc$ ccc.php?$1 [QSA,L]
这工作得很好,但当我将它复制到 Server2 时,它根本就没有应用。
因此我尝试将所有规则集移动到 Server1 上的 VirtualHost 条目,如下所示:
<VirtualHost sub1.domain1.com:80>
ServerName sub1.domain1.com
ProxyPass / http://2.2.2.2/sub1/
ProxyPassReverse / http://2.2.2.2/sub1/
<Directory "/var/www/html/sub1">
AllowOverride All
Allow from All
RewriteEngine on
RewriteBase /sub1
RewriteRule ^aaa$ aaa.php?$1 [QSA,L]
RewriteRule ^bbb$ bbb.php?$1 [QSA,L]
RewriteRule ^ccc$ ccc.php?$1 [QSA,L]
</Directory>
</VirtualHost>
但它仍然没有被应用。
最终目标是重定向类似“http://sub1.domain1.com/aaa/(...)“ 到 ”http://sub1.domain1.com/aaa.php?(...)",同时从 Server2 的“/var/www/html/sub1/(...)/”目录获取所有这些数据。
答案1
我现在让它工作了。我必须在 Server2 上的 000-default.conf 中的实际“sub1”条目之前添加以下 VirtualHost 条目:
<VirtualHost *:80>
ServerName domain1.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory "/var/www/html">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>
星号对于在所有目录中启用 mod_rewrite 非常重要,现在它终于可以正常工作了。在 Server1 上,我必须使用“domain1.com”而不是星号,这有点令人困惑。感谢您将我推向正确的方向。