在Apache中使用Symfony2重写规则不会删除app.php

我的Web目录中有以下的.htaccess文件,用于我的Symfony2安装:

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

但是,当我尝试一些基本的东西,如:

 (whatever)/web/app.php/place 

它不会从URL中删除app.php。 我是Apache的新手,我不确定这里发生了什么事情,谁能说出一些光? 提前致谢!

编辑:由于我正在工作的networking应用程序的结构,我不能移动web.php或app_dev.php网页文件夹之外,也无法修改Apache的服务器configuration,因此,我正在寻找一种替代解决scheme这个问题。

该重写规则并不意味着从URL中删除app.php如果请求的URL不对应一个真实的文件,它的目的是为每个请求使用app.php 。 由于app.php是一个真正的文件,它将被用来提供请求。

如果你想摆脱web/app.php部分,首先创建一个指向web文件夹的虚拟主机:

 <VirtualHost *:80> serverName whatever DocumentRoot /path/to/project/web </VirtualHost> 

这将删除web部分。

然后,要删除app.php部分,将其添加到web/.htaccess文件的开头:

 RedirectMatch permanent ^/app\.php/(.*) /$1 

您必须在Apache中启用重写模块,如“Ifmodulee mod_rewrite.c”所述。

要做到这一点:

  1. 运行命令行命令“a2enmod rewrite”。
  2. 将所有“AllowOverride None”行更改为“AllowOverride All”。

http://www.lavluda.com/2007/07/15/how-to-enable-mod_rewrite-in-apache22-debian/

我今天遇到了这个问题,修复方法是在url重写规则的末尾附加一个/ $ 1。

我的.htaccess看起来像这样:

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

而虚拟主机被定义为:

 <VirtualHost *:80> DocumentRoot /var/www/html/symfony_site/web DirectoryIndex app.php <Directory /var/www/html/symfony_site/web > AllowOverride All Allow from All </Directory> </VirtualHost> 

我刚刚得到同样的问题,我解决了这个问题:

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

当你写RewriteCond %{REQUEST_FILENAME} !-f你说:“不要改变真实的文件…他们应该仍然是可及的。” 如果你删除它,它应该工作。

它允许的原因是一些框架让你使用http://site.tld/script.php/abc=123&def=456风格的链接。

如果你想允许除了 app.php 之外的文件名,你可以添加另一个RewriteCond

我们也一直在努力。 有两个解决方案:

  1. 设置虚拟主机的文档根目录直接指向/web/子文件夹(按照Symfony2的指导)
  2. 移动/web/子文件夹之外的app.phpapp_dev.php ,然后更新.htaccess并相应地在两个文件中包含路径(例如,在您手动将文件移动到上面的一个文件夹后,移除web/更正所有路径)

(注意:不能提供S2的香草安装的例子,因为symfony.com目前似乎正在下降。)

我设法删除我的共享服务器上的web / app.php部分。

  1. 首先,我把app.php移出web目录一级以上,因此我的app.php在根目录下。 然后我在根目录下放置了一个.htaccess
 RewriteEngine on RewriteBase / RewriteRule ^css/(.*) web/css/$1 RewriteRule ^images/(.*) web/images/$1 RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ app.php [QSA,L] 

我在css和图像上使用了RewriteCond,因为它们仍然位于/ web /目录中,所以对css和图像的所有请求将分别路由到web / css和web / images目录。

它为我工作得很好。