Symfony2项目在子目录中

时间:2013-10-01 17:58:41

标签: apache .htaccess symfony

我目前正在研究一个Symfony2应用程序,目前该应用程序必须托管在子目录中。通常,人们会更改Apache vhost中的DocumentRoot,但目前这是不可能的。也无法在根目录中放置任何内容(例如,在public_html/之上)。

DocumentRoot设置为/public_html/。在子目录中具有Symfony2应用程序的结构如下所示:

- public_html/
-- dev/
---- app/
---- bin/
---- src/
---- vendor/
---- web/

如果没有任何特殊配置,可以通过http://example.com/dev/web/app.php与我们联系。但是我想将其更改为http://example.com/dev而无需移动文件。

我想出了以下.htaccess

RewriteEngine on
RewriteCond %{REQUEST_URI} !dev/web/
RewriteRule (.*) /dev/web/app.php/$1 [L]

这种方法有效,但Symfony2报告了以下错误:No route found for "GET /dev/"

如果我将RewriteRule更改为RewriteRule (.*) /dev/web/$1 [L]我可以通过http://example.com/dev/app.php/dashboard(仪表板就是一个示例)访问应用,结果为No route found for "GET hboard",请注意 hboard 。调用http://example.com/dev/app.php/会使页面处于/完美状态,并且所有资产的链接也可以正常工作。

非常感谢任何帮助。及时,此应用也必须从dev/移至/。所以也欢迎解决方案。

1 个答案:

答案 0 :(得分:1)

Symfony2 中的默认web/.htaccess文件如下所示:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>

您应该在dev/web/之前添加app.php并将其移至根目录。

编辑:

经过一些研究,我发现this answer on SO。所以新的.htaccess应该是这样的:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^((?!dev/web/).*)$ dev/web/app.php [QSA,L]
</IfModule>

另见