Php
如何從一個虛擬主機內部重定向到另一個 Apache
我正在將我的應用程序升級到新的 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>
當然,代理可以通過重寫來實現,但這種方式更加明確,並且可以更好地控制選項。