我目前正在研究一个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/
移至/
。所以也欢迎解决方案。
答案 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>
另见