如何在子目录中部署Symfony?

如何在子目录中部署Symfony?,symfony,web-deployment,subdirectory,Symfony,Web Deployment,Subdirectory,我的网站已经准备好部署,我正在尝试在线设置 一些信息: 寄主是卵黄 它不允许SSH,我必须用FTP发送文件。也没有命令行 我希望现在能够在子目录中设置网站:/www/test(我当前的网站仍在/www) 问题: 当我打开URLmywebsite.com/test时,Symfony异常告诉我找不到“GET/test/”的路由,这显然意味着Symfony不知道它在子目录中 我怎么知道呢 编辑: 当我访问my-website.com/test/web时,我才意识到,如果将Symfony应用程序部

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

一些信息:

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

当我打开URL
mywebsite.com/test
时,Symfony异常告诉我
找不到“GET/test/”
的路由,这显然意味着Symfony不知道它在子目录中

我怎么知道呢


编辑:


当我访问
my-website.com/test/web
时,我才意识到,如果将Symfony应用程序部署到不允许SSH的主机上,那么这有点让自己陷入困境——例如,如果你想重建缓存,就必须手动取消
app/cache/*
目录

要直接回答您的问题,如果您的Symfony项目位于
/www/test/
中,则Symfony的web目录为
/www/test/web
,因此您需要使用如下url:

为了完整,请尝试分别访问显式url-
/test/app.php
/test/app\u dev.php
。无论哪种情况,如果您收到Symfony错误页面,您至少知道您的路径是正确的

编辑#1

需要指出的一点是:您的项目和配置文件,并且在这个部署场景中可能是可读的-这不是理想的-因此您可能希望检查这一点,并在可能的情况下采取一些措施来保护这个目录。我知道这可能是一个测试部署,所以这可能不是什么大问题,但始终要注意安全性:)

编辑#2

好的,我不是
.htaccess
专家,但你可以将你的symfony应用程序部署到
/www/symfony/
上,然后重写
/test
URI以显示
/symfony/web/
;e、 g:

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]
这应该为symfony提供所有适用的uri请求(到
/test
/symfony/web
本身),同时限制对symfony核心文件的直接访问


我还没有测试过这一点,因此这将如何与Symfony自己的
配合使用。htaccess
不是我能马上回答的问题。

如何使用
.htaccess
文件来实现您的目标。据我所知,如果您通过web文件夹访问symfony应用程序,例如
foo.com/test/web

尝试在
.htaccess
文件中使用以下代码,该文件将位于
测试
目录的根目录下

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.domain.com$
RewriteCond %{REQUEST_URI} !web/
RewriteRule (.*) /web/$1 [L]
</IfModule>

重新启动发动机
RewriteCond%{HTTP_HOST}^domain.com$[NC,或]
重写cond%{HTTP_HOST}^www.domain.com$
重写cond%{REQUEST_URI}!网/
重写规则(.*)/web/$1[L]

请用您的域名替换
domain.com

我在这里写的正是这个:

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

[ftproot]
-- public_html
---- ...
---- ...
-- symfonyapp
---- app
---- bin
---- src
---- vendor
---- web
------ app.php
------ app_dev.php
------ ...
---- composer.json
---- composer.lock
移动web部件 将“web”文件夹的内容移动到所需的子文件夹中,即“myapp”

让web知道应用程序在哪里 编辑app.php和app_dev.php文件并插入新的应用程序位置

require_once __DIR__ . '/../../symfonyapp/app/bootstrap.php.cache';
require_once __DIR__ . '/../../symfonyapp/app/AppKernel.php';
让应用程序知道如何调用web文件夹 使用新的web文件夹名称编辑文件composer.json

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

啊哈,刚刚看到你的编辑!我了解安全问题,我希望URL显示
foo.com/test
,这是我的问题:-(.绝对可以。那么,您的可公开访问的web根目录是
/www
对吗?您是否可以访问此路径,或者您的主机是否允许您指定另一个web根目录;例如:
/www/public
?我想,如果在任何一种情况下答案都是肯定的,那么您都可以将Symfony项目置于现有web根目录之上,然后执行syM链接Symfony web目录;例如:
ln-s/www/my_Symfony\u project/web/www/public/test
我有权访问
/
,公共目录是
/www
。您的解决方案似乎是相互测试的,但同样:没有命令行。我不知道在该服务器上创建符号链接的任何方法,相信我,我已经尝试过了!它工作得很好!这就是e这正是我想要的。非常感谢。除此之外,我必须祝贺你的文章,它写得很好。@Oltarus很高兴听到这一点!谢谢。但是路线会这样工作吗?例如,@Route(“/home”)虽然这在理论上可以回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。@GeraldSchneider复制/粘贴文章的大块内容是否可以接受?因为我看不到比我在文章中所写内容更好/更短的解释方法。
{
    ...
    "extra": {
        ...
       "symfony-web-dir": "../public_html/myapp"
    }
}