我正在升级我的应用程序到新的PHP版本。
为此我创build了两个虚拟主机一台服务器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_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>
当然,代理可以通过重写来实现,但是这样做更加明确,并且可以更好地控制选项。