Dot-Htaccess

使用 Apache2 mod_proxy 到不同的伺服器,同時保持 .htaccess 規則以某種方式工作

  • November 9, 2019

我正在嘗試將我網站的一部分移動到外部伺服器。我希望這部分可以通過子域訪問,同時仍然能夠應用 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”而不是星號,這有點令人困惑。感謝您將我推向正確的方向。

引用自:https://serverfault.com/questions/990797