使用 Apache2 mod_proxy 到不同的伺服器,同時保持 .htaccess 規則以某種方式工作
我正在嘗試將我網站的一部分移動到外部伺服器。我希望這部分可以通過子域訪問,同時仍然能夠應用 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 - 我沒有’ t 定義它)但我的 .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/(…)/”目錄中獲取所有這些數據。
我現在開始工作了。我必須在 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”而不是星號,這有點令人困惑。感謝您將我推向正確的方向。