根和子目录上的Symfony项目

时间:2015-12-14 16:02:09

标签: php apache symfony

是否可以在根目录(www.domain.com)上部署Symfony2项目,在子目录中部署另一个Symfony2项目? (www.domain.com/project2)

我看到several questionsturorials关于在子目录中部署Symfony2项目,但不能同时在根目录上部署。

我共享了使用Apache网络服务器并具有SSH访问权限的webhosting,可以编辑.htaccess文件,但我无法编辑httpd.conf文件。

这怎么可能?

修改 我在cPanel中创建了一个子域,并在那里安装了一个单独的Symfony项目,而不是子目录。无需更改htaccess或其他配置即可完美运行。

1 个答案:

答案 0 :(得分:2)

一切皆有可能,但这需要一些魔力。

问题在于.htaccess,更具体地说是Symfony2在那里提出的规则:

# If the requested filename exists, simply serve it.
# We only want to let Apache serve files and not directories.
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]

# Rewrite all other queries to the front controller.
RewriteRule .? %{ENV:BASE}/app.php [L]

您对子目录项目的请求将被重新写入主项目的前端控制器,游戏结束。

有几种方法可以解决这个问题。一种方法是更改​​主项目的.htaccess文件,以明确排除子项目目录。但是,由于第一个规则,这仍然允许从您可能不需要的主项目提供子项目文件。这可以通过更多摆弄重写规则来解决。

另一种选择是使用Symfony2来解决这个问题。我有一个类似的项目(不是你的问题,但也有子项目),我的routing.yml是这样的:

collaboration:
    resource: "@CCollabBundle/Controller"
    type:     annotation
    prefix:   /{_site}
    defaults:
     _site: demo

您可以简单地添加一个没有指向主项目的前缀的路由规则,以及一个带有指向子项目的前缀的路由规则。例如(未经测试的代码,可能有效也可能无效):

mainproject:
    resource: "@MainProjectBundle/Resources/config/routing.yml"
    prefix:   /

subproject:
    resource: "@SubProjectBundle/Resources/config/routing.yml"
    prefix:   /subproject