0

我目前正在开发一个 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(当然,dashboard 是一个示例)访问应用程序,这会导致No route found for "GET hboard",请注意hboard。调用http://example.com/dev/app.php/确实会在 / 处完美呈现页面,并且指向所有资产的链接也可以正常工作。

任何帮助将非常感激。随着时间的推移,这个应用程序也必须从到dev/移动/。因此,也欢迎为此提供解决方案。

4

1 回答 1

1

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

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

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

编辑:

经过一番研究,我在 SO 上找到了这个答案。所以新的.htaccess应该是这样的:

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

也看看

于 2013-10-01T18:04:55.807 回答