Я переношу свое приложение с PHP 5.6 на PHP 8.0, используя фронт-контроллер, перенаправляющий на мое устаревшее приложение или мое новое приложение в зависимости от URI.
Я попробовал использовать псевдоним, и это работает, но мне нужно сохранить один и тот же хост для обоих и не использовать псевдоним.
Например: https://foo.bar.com/my_php80_routes https://foo.bar.com/my_php56_routes
Вот моя неудачная попытка с псевдонимом
<VirtualHost *:80>
ServerName foo.bar.com
DocumentRoot /var/www/html/foobar/public
# Unwanted prefix
Alias /legacy /var/www/html/foobar/legacy/web
<Directory /var/www/html/foobar/public>
AllowOverride none
Require all granted
SetEnv APP_ENV "dev"
# Handled by php8.0 : ok
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php/php8.0-fpm.sock|fcgi://localhost/"
</FilesMatch>
FallbackResource /index.php
DirectoryIndex index.php
</Directory>
<Directory /var/www/html/foobar/legacy/web>
AllowOverride none
Require all granted
# Handled by libapache2-mod-php5.6 : ok
FallbackResource /app_dev.php
DirectoryIndex app_dev.php
</Directory>
ErrorLog /var/log/apache2/foobar.log
CustomLog /var/log/apache2/foobar.log combined
</VirtualHost>
Я искал другой метод, возможно, основанный на пользовательском заголовке HTTP, например «FOOBARAPP_LEGACY: 1», но не нашел способа сопоставить заголовок HTTP с расположением файловой системы с помощью Apache.
Есть ли другое решение?
[редактировать]
Я постараюсь объясниться получше.
Я пытаюсь добиться того, чтобы 2 приложения работали на разных версиях PHP, одно из которых будет «Главным приложением» (новое приложение на PHP8.0) и перенаправлялось на «Второе приложение», если маршрут не найден «Главным приложением». Все это будет полностью прозрачно для конечного пользователя. (тот же домен, без префикса)
Еслиhttps://foo.bar.com/postsеще не перенесено: основное приложение не находит маршрут и перенаправляется во второе приложение, которое будет обслуживать контент.
Когда эта конечная точка переносится в «Главное приложение»: Главное приложение находит маршрут и обслуживает контент.
Поэтому я прошу решения, которое не включает в себя /prefix или новый поддомен.
решение1
Итак, вы пытаетесь направить определенный виртуальный хост через канал, который идет к прокси-модулю для доступа к хосту по петле??? Нотолькодля PHP-файлов? Это звучит неоправданно сложно.
Почему бы не запустить второй виртуальный хост на вторичном порту и не использовать mod_proxy для управления всем виртуальным хостом (т.е., в общем, это «способ» выполнить обновление, сохранив при этом выход в Интернет).
Или, знаете, вы можете буквально сделать виртуальный хост для каждого, когда вы мигрируете. А затем вставить простые перенаправления между виртуальными хостами, когда «альтернативный» URL появляется на «неправильном» хосте.
Когда вы имеете дело с таким типом миграции, выберитепростейшийформа «это против того» и катитесь в этом направлении.
Или, если яполностьюпропустил "спросить" в вашем вопросе... у вас есть успех в запуске нескольких версий PHP в одном экземпляре? Пожалуйста, уточните, поскольку, честно говоря... этонетто, что я когда-либо рекомендовал бы, потому что, знаете ли... PHP. ;-)