我的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的新手,我不确定这里发生了什么,有人可以解释一下吗?提前谢谢!
编辑: 由于我正在使用的Web应用程序的结构,我无法移动web文件夹之外的app.php或app_dev.php,也无论如何我也无法修改Apache的服务器配置,因此我正在寻找这个问题的替代解决方案
答案 0 :(得分:25)
您必须在Apache中启用重写模块,如“IfModule mod_rewrite.c”所述。
这样做:
请参阅http://www.lavluda.com/2007/07/15/how-to-enable-mod_rewrite-in-apache22-debian/。
答案 1 :(得分:21)
重写规则并不意味着从网址中删除app.php
。它的目的是为每个请求使用app.php
,如果请求URL与真实文件不对应。由于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
答案 2 :(得分:4)
我遇到了同样的问题,我修理了这个问题:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /web/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
答案 3 :(得分:4)
我今天遇到了这个问题,修复是在网址重写规则的末尾追加/ $ 1。
我的.htaccess看起来像这样:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php/$1 [QSA,L]
</IfModule>
虚拟主机的定义如下:
<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>
答案 4 :(得分:0)
当您写RewriteCond %{REQUEST_FILENAME} !-f
时,您说“不要更改真实文件......它们应该仍然可以访问”。如果你删除它,它应该工作。
允许这样做的原因是某些框架允许您使用http://site.tld/script.php/abc=123&def=456样式的链接。
如果您希望它允许文件名,除了 app.php,您可以将其添加为另一个RewriteCond
。
答案 5 :(得分:0)
我们也一直在努力。有两种解决方案:
/web/
子文件夹(根据Symfony2指南)app.php
和app_dev.php
移到/web/
子文件夹之外,然后更新.htaccess
并相应地在两个文件中包含路径(即删除web/
以更正所有文件手动将文件移到上面一个文件夹后的路径)(注意:无法提供来自S2的vanilla安装的示例,因为symfony.com目前似乎已经关闭。)
答案 6 :(得分:0)
我设法删除共享服务器上的web / app.php部分。
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目录。
对我来说效果很好。