htaccess - 在子文件夹中安装 Symfony2

Posted

技术标签:

【中文标题】htaccess - 在子文件夹中安装 Symfony2【英文标题】:htaccess - install Symfony2 in subfolder 【发布时间】:2015-03-10 16:44:57 【问题描述】:

我正在尝试将 symfony 应用程序部署到我的根目录的子文件夹中,并且我正在尝试找出正确的方法。我只是解释一下情况。我的根目录有一个名为/private 的子文件夹,其中包含一个重定向到/private/web/current/ 的htaccess 文件(我正在使用capistrano 进行部署)。

文件夹结构

- ROOT/
---- private/
------- .htaccess (1)
------- current/
----------- web/
------------- app.php
------------- .htaccess (2)

htaccess (1)

RewriteEngine On
RewriteRule ^$ /private/current/web/ [L]

htaccess (2)

DirectoryIndex app.php

<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 ^app\.php(/(.*)|$) %ENV:BASE/$2 [R=301,L]

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

     RewriteRule .? %ENV:BASE/app.php [L]
 </IfModule>

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

结果

当我请求 /private 时,我收到 symfony 错误

No route found for "GET /private/"

当我请求 /private/login/login 时,我收到 浏览器错误

Not Found

The requested URL /private/login was not found on this server.

现在 symfony 是从根目录路由的,但是 symfony 项目的根目录实际上是 /private。我是部署和 htaccess 规则方面的菜鸟,有没有人可以帮助我解决这个问题?

提前致谢。

【问题讨论】:

404 Route not found 来自 symfony,所以您是否尝试过将您在浏览器中输入的 url 中的“private”替换为实际路由?无论如何,请告诉我们哪个目录是文档根目录以及您请求的 url。 我用一些例子更新了这个问题。 【参考方案1】:

我认为第一个 htaccess 是问题(私有后的路径需要附加到新的 url)。试试看

RewriteRule ^/private/?(.*) /private/app/web/$1

或(使用http://www.htacces-s-redirect.net/生成)

RedirectMatch 301 /private(.*) /private/app/web/$1 

【讨论】:

以上是关于htaccess - 在子文件夹中安装 Symfony2的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CakePHP 安装附近的子文件夹中安装 Laravel

CakePHP .htaccess mod_rewrite 配置以排除特定文件夹/url

在子文件夹中维护单独的.htaccess文件

在子目录中安装 Laravel

放置在子文件夹中时,错误文档在 .htaccess 中重定向

htaccess - 根据地理位置拒绝目录