Php

如何從一個虛擬主機內部重定向到另一個 Apache

  • October 21, 2015

我正在將我的應用程序升級到新的 PHP 版本。

為此,我創建了兩個虛擬主機,一個伺服器 PHP 5.3 應用程序,另一個使用 PHP 5.6。

我的虛擬主機就像,

<VirtualHost *:80>
 ServerName php53app.com 
 DocumentRoot /var/www/php_53/public 
 <Directory />
  Options FollowSymLinks
  AllowOverride All
  AddHandler php-cgi .php
  Action php-cgi /cgi-bin-php/php-cgi-5.3.0
 </Directory>
 ErrorLog /var/log/apache2/error.log
 LogLevel warn
 CustomLog /var/log/apache2/access.log combined
</VirtualHost>

<VirtualHost *:80>
 ServerName php56app.com 
 DocumentRoot /var/www/php_56/public 
 <Directory />
  Options FollowSymLinks
  AllowOverride All
  AddHandler php-cgi .php
  Action php-cgi /cgi-bin-php/php-cgi-5.6.0
 </Directory>
 ErrorLog /var/log/apache2/error.log
 LogLevel warn
 CustomLog /var/log/apache2/access.log combined
</VirtualHost>

我計劃按 url 遷移每個 url。

例如 :

當我遷移/login到新應用程序時,它應該顯示php53app.com/login而不是php56app.com/login.

所以我的需要是在同一個域名中提供所有 URL,無論它是新的還是舊的。有沒有可能使用apache的mod rewrite之類的方法?

重寫並不是真正的方法。您應該使用代理請求。

來自 mod_proxy 文件:

此外,反向代理可以簡單地用於將多個伺服器帶入同一個 URL 空間。

您的設置將如下所示:

<VirtualHost *:80>
   ServerName php53app.com 
   DocumentRoot /var/www/php_53/public

   # General proxy config ... do not skip
   <Proxy *>
       AddDefaultCharset off
       Order deny,allow
       Allow from all
   </Proxy>

   # now proxy the migrated part
   <Location /login>
       ProxyPass           http://php56app.com/login
       ProxyPassReverse    http://php56app.com/login
   </Location>

   <Directory />
       Options FollowSymLinks
       AllowOverride All
       AddHandler php-cgi .php
       Action php-cgi /cgi-bin-php/php-cgi-5.3.0
   </Directory>
   ErrorLog /var/log/apache2/error.log
   LogLevel warn
   CustomLog /var/log/apache2/access.log combined
</VirtualHost>

當然,代理可以通過重寫來實現,但這種方式更加明確,並且可以更好地控制選項。

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