使用Symfony2的Apache中的RewriteRule不删除app.php

cel*_*orb 14 apache rewrite symfony

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

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

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

(whatever)/web/app.php/place
Run Code Online (Sandbox Code Playgroud)

它不会从URL中删除app.php.我是Apache的新手,我不确定这里发生了什么,有人可以解释一下吗?提前致谢!

编辑:由于我正在使用的Web应用程序的结构我无法移动web文件夹之外的app.php或app_dev.php,也无论如何我也无法修改Apache的服务器配置,因此我正在寻找替代解决方案这个问题.

Pat*_*awa 25

您必须在Apache中启用重写模块,如"IfModule 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/.


Eln*_*mov 21

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

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

<VirtualHost *:80>
    ServerName whatever
    DocumentRoot /path/to/project/web
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

这将删除该web部分.

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

RedirectMatch permanent ^/app\.php/(.*) /$1
Run Code Online (Sandbox Code Playgroud)

  • 你是对的 - 因为`.htaccess`文件中的重写规则,无论如何都会使用'app.php`.我的`RedirectMatch`指令所做的不是让用户明确地转到`app.php`****.如果用户以某种方式进入"www.acme.com/app.php/home",她将被重定向到"www.acme.com/home" - 这就是它的全部内容. (3认同)