Prod路由需要“app.php”


Prod routes require `app.php`

prod环境中除'外的所有路由都要求包含app.php。与app.php所有站点功能可用。开发环境的行为符合预期。环境为Ubuntu 12.04(在win8 VirtualBox VM上),PHP 5.4, Apache 2.2。典型的Apache错误日志条目:

[client 127.0.0.1]文件不存在:/var/www/volunteer/web/non-profits

一些附加细节:

  • PHP 5.4.31-1+deb.sury.org~precise+1
  • .htaccess存在于...'web
  • mod_rewrite已启用
  • Symfony 2.5.3 prod缓存已被清除(很多很多次)
  • 资产安装
  • assetic倾倒
  • vhost目录索引包含app.php

我错过了什么?

这里是。htaccess(无注释)
DirectoryIndex app.php
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::'2$
    RewriteRule ^(.*) - [E=BASE:%1]
    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>

路线:

$ php app/console router:debug --env=prod
[router] Current routes
 Name                              Method   Scheme Host Path                      
...
 nonprofits                        ANY      ANY    ANY  /non-profits  

你知道Apache是否正在执行。htaccess中的内容吗?也许你需要AllowOverride all?

也许你忘记安装资源了?

尝试在终端输入:

  • php app/console assets:install——env=production
  • php app/console asset:dump——env=production

如果您在生产中,显然要添加——env=production部分。

确保在您的vhost中也有以下行:

DirectoryIndex app.php

我应该问的问题是:"为什么Apache忽略了。htaccess?"在这里的Ubuntu论坛上可以找到答案。使用webmin,我改变了AllowOverride指令,所以它现在读:

<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>

这只是我一直在寻找的一个层次。