我正在将我的应用程序升级到新的 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 进行迁移。
例如 :
当我迁移/login
到新应用程序时,它应该显示php53app.com/login
而不是php56app.com/login
。
因此我需要为同一域名的所有 URL 提供服务,无论是新域名还是旧域名。有没有可能使用 apache 的 mod rewrite 之类的方法?
答案1
重写并不是真正的解决方法。您应该使用代理请求。
来自 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>
当然,可以通过重写来实现代理,但是这种方式更明确一些,可以更好地控制选项。