Назад | Перейти на главную страницу

Как выполнить внутреннее перенаправление с одного виртуального хоста на другой 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_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>

Конечно, проксирование может быть достигнуто с помощью перезаписи, но этот способ немного более явный и позволяет более точно контролировать параметры.