根目录和子目录上的Symfony项目


Symfony project on root and subdirectory

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

我看到了一些关于在子目录上部署Symfony2项目的问题,但不是同时在根目录上。

我共享了使用Apache Web服务器的网络托管,可以通过SSH访问并可以编辑.htaccess文件,但我不能编辑httpd.conf文件。

这怎么可能呢?

编辑:我在cPanel中创建了一个子域,并在那里安装了一个单独的Symfony项目,而不是子目录。它在不更改htaccess或其他配置的情况下完美工作。

任何事情都有可能,但这需要一些魔法。

问题出在.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