我想在一台Apache服务器上托管同一个Symfony2应用程序的两个实例。每个应用程序都应该像这样解决:
http://myserver/app1/ http://myserver/app2/
为此,我在Apache中设置了两个基于端口的虚拟主机,在端口80上设置了第三个虚拟主机,将文件夹请求重定向到正确的虚拟主机:
<VirtualHost *:80>
DocumentRoot /var/www
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/app1/(.*)$
RewriteRule ^ http://%{HTTP_HOST}:9999/%1 [L]
RewriteCond %{REQUEST_URI} ^/app2/(.*)$
RewriteRule ^ http://%{HTTP_HOST}:8888/%1 [L]
</VirtualHost>
<VirtualHost *:9999>
DocumentRoot /var/www/app1/web
<Directory /var/www/app1/web>
</Directory>
</VirtualHost>
<VirtualHost *:8888>
DocumentRoot /var/www/app2/web
<Directory /var/www/app2/web>
</Directory>
</VirtualHost>
效果很好,因为http://myserver/app1/被重定向到http://myserver:9999而http://myserver/app2/被重定向到http://myserver:8888(浏览器中的网址更改)。我希望网络浏览器中的网址保持为http://myserver/app1或http://myserver/app2。 我可以通过添加交换机&#39; P&#39;到RewriteRule,就像这样:
RewriteRule ^ http://%{HTTP_HOST}:9999/%1 [L,P]
然而,这会产生问题,因为现在Symfony看到所有请求都从端口80传入,并将它们重定向回该端口,而不是重定向到正确的虚拟主机。我认为解决此问题的一种方法是强制Symfony2使用正确的应用程序名称预先添加所有请求。 我尝试通过修改vendor \ symfony \ symfony \ src \ Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller.php中的generateUrl方法来始终在生成的URL前面添加应用程序名称,但它只能用于页面请求(资产是例如缺少。)
所以我的问题是,如果有一种方法可以让Symfony认为所有请求都应该回到正确的应用程序中。 URL?
谢谢, 雅努什
答案 0 :(得分:0)
我的建议是你不要尝试通过Apache配置来做到这一点。您可以将每个Symfony应用程序配置为存放在子文件夹中,请参阅: http://www.yegods.it/2015/01/30/install-symfony-app-in-a-subfolder-of-an-existing-site/
您只需要编辑 app.php , app_dev.php 和 composer.json (对于资产)。