如何在子目录中部署Symfony?

时间:2015-07-15 09:48:35

标签: symfony web-deployment subdirectory

我的网站已准备好部署,我正在尝试在线设置。

有些信息:

  • 主持人是OVH。
  • 它不允许SSH,我必须用FTP发送我的文件。也没有命令行。
  • 我希望能够在子目录中设置网站:/www/test目前(我当前的网站仍在/www)。

问题:

当我打开网址my-website.com/test时,Symfony异常会告诉我No route found for "GET /test/",这显然意味着Symfony并不知道它位于子目录中。

我该怎么说呢?

修改

我刚刚意识到它在我访问my-website.com/test/web时有用。

2 个答案:

答案 0 :(得分:7)

我在这里写到:https://www.refactory-project.com/2015/11/30/install-symfony-app-in-a-subfolder-of-an-existing-site/

上传应用程序部分

首先在站点根目录的同一级别上传应用程序文件夹:

[ftproot]
-- public_html
---- ...
---- ...
-- symfonyapp
---- app
---- bin
---- src
---- vendor
---- web
------ app.php
------ app_dev.php
------ ...
---- composer.json
---- composer.lock

移动Web部件

将“web”文件夹的内容移动到所需的子文件夹,即“myapp”。

[ftproot]
-- public_html
---- ...
---- ...
---- myapp
------ app.php
------ app_dev.php
------ ...
-- symfonyapp
---- app
---- bin
---- src
---- vendor
---- composer.json
---- composer.lock

让网络知道应用程序在哪里

编辑文件app.php和app_dev.php并插入新的应用程序位置。

require_once __DIR__ . '/../../symfonyapp/app/bootstrap.php.cache';
require_once __DIR__ . '/../../symfonyapp/app/AppKernel.php';

让应用程序知道如何调用Web文件夹

使用新的网络文件夹名称编辑文件composer.json

{
    ...
    "extra": {
        ...
       "symfony-web-dir": "../public_html/myapp"
    }
}

答案 1 :(得分:2)

如果要将Symfony应用程序部署到不允许SSH的主机,那么您可能会为自己的困难做好准备 - 例如,如果您想重建缓存,则必须手动核对您的{{1 dirs?

要直接回答您的问题,如果您的Symfony项目位于app/cache/*,那么 Symfony的网络目录为/www/test/,因此您需要使用以下网址:

  

http://foo.com/test/web

为了完整性,请尝试分别访问显式网址 - /www/test/web/test/app.php。如果您在任何一种情况下收到Symfony错误页面,您至少知道自己走在正确的道路上。

编辑#1

需要指出的一点:您的项目和配置文件可能在此部署方案中可读 - 这并不理想 - 因此您可能需要检查此操作并采取一些措施来保护此目录(如果可能)。我很欣赏这可能是一个测试部署,所以它可能不是什么大问题,但是要注意安全性总是好的:)

编辑#2

好的YMMV,我不是/test/app_dev.php专家,但您可以将您的symfony应用部署到.htaccess并重写/www/symfony/ URI以显示/test; e.g:

/symfony/web/

这应该向Symfony提供所有适用的uri请求(到RewriteEngine On # rewrite all `/test/*` uris to `symfony/web` RewriteRule ^test(.*)$ symfony/web/$1 [L,QSA] # direct access to /symfony dir is a 404 RewriteRule !^symfony/web/$1 - [R=404] /test本身),同时限制对symfony核心文件的直接访问。

Haven没有对此进行过测试,所以这对Symfony自己的/symfony/web的影响并不是我无法回答的问题。