Mod rewrite 将symfony2 htaccess文件移动到vhost

Mod rewrite 将symfony2 htaccess文件移动到vhost,mod-rewrite,symfony,Mod Rewrite,Symfony,为了提高性能,我想将.htaccess内容移动到vhost中,我正试图解决一个问题 这是在.htaccess中: RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ app.php [QSA,L] 我在Vhost中尝试过这个: RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /app.php [QSA,L] 问题是,第二个将/app_dev.php/controller重定

为了提高性能,我想将.htaccess内容移动到vhost中,我正试图解决一个问题

这是在.htaccess中:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
我在Vhost中尝试过这个:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /app.php [QSA,L]
问题是,第二个将/app_dev.php/controller重定向到app.php,它不应该像第一个示例中那样

非常感谢任何提示。

来自

请求\u文件名:

与请求匹配的文件或脚本的完整本地文件系统路径,如果在引用请求文件名时服务器已经确定了该路径。否则,例如在虚拟主机上下文中使用时,将使用与请求URI相同的值

因此,您实际测试的不是路径为
/app_dev.php
的文件,它不是绝对路径,也就是说,前面没有
DocumentRoot
路径。所以,你必须这样做:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteRule ^ /app.php [L] 
  • ^(.*)$
    不需要这样做,因为您只是在重写而没有考虑URI
  • Flag
    QSA
    也不是必需的,因为您没有操作任何查询字符串
我正在使用的脚本要求每个请求都通过app.php,如果请求不是文件。但如果存在这样的文件,它将使用app_dev.php。我不知道它是如何做到的,但对于我上面发布的.htaccess文件,下面是发生的情况:domain.com/test/something请求app.php并接收/test/something作为查询字符串/app_dev.php/test/something将请求app_dev.php并发送/test/something作为查询字符串。出于某种原因。我不知道它是如何处理这个.htaccess文件的。出于某种原因,我尝试过的(第二个代码块)和您编写的代码对我来说都是一样的,而/app_dev.php/被重定向到/这就是我的问题,对于original.htaccess,它不会这样做。@Leo你的htaccess还有什么其他规则吗?这是我的.htaccess中唯一的规则,vhosts只有www到非www的重写,这是你之前帮我做的。你在Vhost中用“重写引擎打开”激活重写了吗?@MartinRothenberger是的,我激活了。否则,它根本不会起作用。