Apache 如何将symfony/web/app.php移动到/root/app.php

Apache 如何将symfony/web/app.php移动到/root/app.php,apache,.htaccess,symfony,Apache,.htaccess,Symfony,在我的symfony中,我将/MySymfonyFolder/web/app.php移动到root,并将其重命名为index.php,例如/MySymfonyFolder/index.php,我更改了htaccess,如下所示,但这会导致在编写时通过cssrewite查找css图像出现问题 1) 我不想将/MySymfonyFolder/web/bundles/、/MySymfonyFolder/web/images/和/MySymfonyFolder/web/css也移动到/MySymfony

在我的symfony中,我将/MySymfonyFolder/web/app.php移动到root,并将其重命名为index.php,例如/MySymfonyFolder/index.php,我更改了htaccess,如下所示,但这会导致在编写时通过cssrewite查找css图像出现问题

1) 我不想将/MySymfonyFolder/web/bundles/、/MySymfonyFolder/web/images/和/MySymfonyFolder/web/css也移动到/MySymfonyFolder/。 2) 我不想将/app/和/src/移动到symfony root之外的上层

假设我希望所有/index.php(symfony app.php)、/app/和/src/都位于子文件夹中,那么htaccess应该如何识别/MySymfonyFolder/index.php和/MySymfonyFolder/web/也可以找到图像

这是我的错误。htaccess导致css图像问题。请改正它。我搜索了stackoverflow,没有发现任何与此相关的内容

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]

    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .? - [L]

    RewriteRule .? %{ENV:BASE}/index.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 302 ^/$ /index.php/
    </IfModule>
</IfModule>

重新启动发动机
RewriteCond%{REQUEST_URI}:$1^(/.+)/(.*):\2$
重写规则^(.*)-[E=基:%1]
RewriteCond%{HTTP:Authorization}。
重写规则。*-[E=HTTP\U授权:%{HTTP:AUTHORIZATION}]
RewriteCond%{ENV:REDIRECT_STATUS}^$
重写规则^index\.php(/(.*)|$)%{ENV:BASE}/$2[R=301,L]
RewriteCond%{REQUEST_FILENAME}-f
重写规则[L]
重写规则.?%{ENV:BASE}/index.php[L]
重定向匹配302^/$/index.php/
试试:

所有这些正在做的事情都是寻找通常会在web文件夹中的任何请求,并将web/部件预先挂起到请求中,因此理论上它应该可以工作,可能只需要根据您拥有的文件进行调整

您还应该考虑更新.htaccess,以防止直接访问web文件夹中不存在的其他应用程序文件,Symfony使这些文件无法访问是有原因的。不建议将根文件夹用作DocumentRoot

试试看:

所有这些正在做的事情都是寻找通常会在web文件夹中的任何请求,并将web/部件预先挂起到请求中,因此理论上它应该可以工作,可能只需要根据您拥有的文件进行调整

您还应该考虑更新.htaccess,以防止直接访问web文件夹中不存在的其他应用程序文件,Symfony使这些文件无法访问是有原因的。不建议将根文件夹用作DocumentRoot

你应该看看这张照片

如果需要重命名或移动web目录,唯一需要保证的是app.php和app_dev.php前端控制器中app目录的路径仍然正确。如果您只是简单地重命名了目录,就可以了。但如果以某种方式移动了它,则可能需要修改这些文件中的路径:

require_once __DIR__.'/app/bootstrap.php.cache';
require_once __DIR__.'/app/AppKernel.php';
您还需要更改composer.json文件中的extra.symfony-web-dir选项:

{
    ...
    "extra": {
        ...
        "symfony-web-dir": "."
    }
}
你应该看看这张照片

如果需要重命名或移动web目录,唯一需要保证的是app.php和app_dev.php前端控制器中app目录的路径仍然正确。如果您只是简单地重命名了目录,就可以了。但如果以某种方式移动了它,则可能需要修改这些文件中的路径:

require_once __DIR__.'/app/bootstrap.php.cache';
require_once __DIR__.'/app/AppKernel.php';
您还需要更改composer.json文件中的extra.symfony-web-dir选项:

{
    ...
    "extra": {
        ...
        "symfony-web-dir": "."
    }
}

我的经验是,如果你使用的是Symfony2,它可能对共享主机来说太大了。您需要控制服务器,尤其是设置文档根目录等


考虑使用Linode或Digital Ocean之类的工具。或者重新考虑是否需要一个像Symfony2一样完整的框架。我相信Laravel在共享主机上工作得很好

我的经验法则是,如果您使用的是Symfony2,它可能对共享主机来说太大了。您需要控制服务器,尤其是设置文档根目录等


考虑使用Linode或Digital Ocean之类的工具。或者重新考虑是否需要一个像Symfony2一样完整的框架。我相信Laravel在共享主机上工作得很好

您正在移动应用程序的入口点,从而移动应用程序的基本url,因此可能会弄乱任何相对路径,例如,
/bundles/mybundles/css/main.css
现在可能需要引用
/web/bundles/mybundles/css/main.css
。目前我手头没有Symfony来仔细检查它,但看起来您正在更改文档根,这破坏了相对链接。使用/MySymfonyFolder/root中的htaccess可以解决所有问题吗?您可能会重写对/bundles/到/web/bundles的任何请求。symfony团队以这种方式构建框架是有原因的,如果文档根是一个级别,那么您就产生了安全风险。如果您能解释为什么要这样做,那么我们应该能够提出更好的解决方案。您能提出更好的htaccess吗?您正在移动应用程序的入口点,从而移动应用程序的基本url,因此您可能会弄乱任何相关路径,例如,
/bundles/mybundles/css/main.css
现在可能需要引用
/web/bundles/mybundles/css/main.css
。目前我手头没有Symfony来仔细检查它,但看起来您正在更改文档根,这破坏了相对链接。使用/MySymfonyFolder/root中的htaccess可以解决所有问题吗?您可能会重写对/bundles/到/web/bundles的任何请求。symfony团队以这种方式构建框架是有原因的,如果文档根是一个级别,那么您就产生了安全风险。如果您能解释为什么要这样做,那么我们应该能够提出更好的解决方案。您能提出更好的htaccess吗?事实上,我这样做了,它正在工作,但它有资产问题,正如我在这里所说的,我还应该做些什么?请阅读上面的评论。我想我在那个问题中所描述的问题是因为在assetic配置中读取的,这里正确吗?这个简单的答案不仅帮助我解决了我的专业问题