我正在将我的应用程序从 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”),但我没有找到使用 Apache 将 HTTP HEADER 映射到文件系统位置的方法。
还有其他解决办法吗?
[编辑]
我会尝试更好地解释自己。
我想要实现的是让 2 个应用程序分别运行在不同的 PHP 版本上,一个是“主应用程序”(PHP8.0 上的新应用程序),如果“主应用程序”未找到路由,则重定向到“第二个应用程序”。所有这些对最终用户都是完全透明的。(同一域,无前缀)
如果https://foo.bar.com/posts尚未迁移:主应用程序找不到路由,并重定向到提供内容的第二个应用程序。
当此端点迁移到“主应用程序”时:主应用程序找到路由并提供内容。
因此,我寻求一个不涉及 /prefix 或新子域的解决方案。
答案1
那么,您试图通过管道将特定的虚拟主机引导至代理模块,以便通过环回访问主机吗?但是仅有的适用于 PHP 文件?这听起来有点太复杂了。
为什么不在辅助端口上运行第二个虚拟主机,并使用 mod_proxy 来处理整个虚拟主机。(即,通常是进行升级的“方式”,并且仍然面向互联网)。
或者,您知道,在迁移时,您可以为每个虚拟主机创建一个虚拟主机。然后,当“备用”URL 出现在“错误”主机上时,在虚拟主机之间插入简单的重定向。
当你处理此类迁移时,请选择最简单的以“这个与那个”的形式并朝那个方向滚动。
或者,如果我完全地错过了你问题中的“询问”... 你是否在同一个实例下成功运行了多个版本的 PHP?请澄清一下,坦率地说...不是我始终会推荐一些东西,因为,你知道... PHP。;-)