修改Symfony2路由以预先添加具有应用名称

时间:2015-07-26 05:22:30

标签: php apache symfony mod-rewrite

我想在一台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:9999http://myserver/app2/被重定向到http://myserver:8888(浏览器中的网址更改)。我希望网络浏览器中的网址保持为http://myserver/app1http://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?

谢谢, 雅努什

1 个答案:

答案 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 (对于资产)。