フロント コントローラーを URI に応じてレガシー アプリまたは新しいアプリにリダイレクトすることで、アプリを PHP 5.6 から PHP 8.0 に移行しています。
エイリアスを試してみましたが、うまくいきました。ただし、両方に対してまったく同じホストを維持し、エイリアスを使用しないようにする必要があります。
例えば: 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>
「FOOBARAPP_LEGACY: 1」のようなカスタム HTTP ヘッダーに基づいた別の方法を探しましたが、Apache を使用して HTTP ヘッダーをファイルシステムの場所にマップする方法は見つかりませんでした。
他に解決策はありますか?
[編集]
もっとわかりやすく説明できるように努力します。
私が実現しようとしているのは、それぞれ異なる PHP バージョンで実行される 2 つのアプリケーションを用意することです。1 つは「メイン アプリ」(PHP8.0 の新しいアプリ) で、ルートが「メイン アプリ」で見つからない場合は「2 番目のアプリ」にリダイレクトします。これらすべては、エンド ユーザーに対して完全に透過的です。(同じドメイン、プレフィックスなし)
もしhttps://foo.bar.com/postsまだ移行されていません: メイン アプリはルートを見つけられず、コンテンツを提供する 2 番目のアプリにリダイレクトします。
このエンドポイントが「メイン アプリ」に移行されると、メイン アプリはルートを見つけてコンテンツを提供します。
したがって、/ プレフィックスや新しいサブドメインを必要としない解決策を求めています。
答え1
つまり、特定の仮想ホストをパイプ経由でプロキシモジュールに送り、ループバックでホストにアクセスしようとしているということですか?しかしのみPHP ファイル用ですか? 不必要に複雑に聞こえます。
2 番目の仮想ホストをセカンダリ ポートで実行し、mod_proxy を使用して仮想ホスト全体を処理してみてはいかがでしょうか。(つまり、アップグレードを行う一般的な「方法」であり、インターネットに接続したままにしておきます)。
または、ご存知のとおり、移行時にそれぞれに仮想ホストを文字通り作成できます。そして、「代替」URL が「間違った」ホストに表示されたら、仮想ホスト間で単純なリダイレクトを挿入します。
このような移行に取り組む場合は、もっとも単純な「これ対あれ」という形で、そのように転がります。
あるいは、もし私が完全に質問の「尋ねる」を見逃しました...同じインスタンスで複数のバージョンのPHPを実行することに成功していますか?率直に言って、それはない私がお勧めしたいのは、ご存知のとおり、PHP だからです。 ;-)