【问题标题】:Symfony project on root and subdirectory根目录和子目录上的 Symfony 项目
【发布时间】:2015-12-14 16:02:09
【问题描述】:

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

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

我有共享虚拟主机,它使用 Apache 网络服务器并具有 SSH 访问权限,并且可以编辑 .htaccess 文件,但我无法编辑 httpd.conf 文件。

这怎么可能?

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

【问题讨论】:

  • 这与您如何配置网络服务器有关,而不是 Symfony。您有权访问您的网络服务器配置吗?
  • 我有 SSH 访问权限并且可以编辑 .htaccess,但我无法编辑 httpd.conf 文件。

标签: php apache symfony


【解决方案1】:

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

问题出在 .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 文件以明确排除子项目目录。但是,由于第一条规则,这仍然允许从您可能不想要的主项目提供子项目 files。这可以通过修改重写规则来解决。

另一种选择是使用 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

【讨论】:

  • 请注意,这意味着您的两个项目都在同一个 Symphony2 安装中。如果您需要它们绝对分开,那么摆弄重写是要走的路。
  • 谢谢。这两个项目确实需要完全分开。我想如果我可以访问 Apache conf (httpd.conf),这个问题会更容易解决。
  • 实际上,我在 cPanel 中创建了一个子域,并在那里安装了一个单独的 Symfony 项目,而不是子目录。效果很好。
  • 是的,子域会更容易。我以为你没有这个选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
  • 2013-10-02
相关资源
最近更新 更多