【问题标题】:Moving symfony2 htaccess file into vhost将 symfony2 htaccess 文件移动到 vhost
【发布时间】:2012-02-27 03:30:17
【问题描述】:

我想将 .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/ 控制器重定向到 app.php 并且它不应该像第一个示例中那样。

非常感谢任何提示。

【问题讨论】:

  • 您是否在您的 Vhost 中使用“RewriteEngine on”激活了重写?
  • @MartinRothenberger 是的,我做到了。否则根本行不通。

标签: mod-rewrite symfony


【解决方案1】:

来自RewriteCond Directive Apache Docs

REQUEST_FILENAME:

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

因此,您实际测试的不是具有路径/app_dev.php 的文件,它不是绝对路径,即没有预先添加DocumentRoot 路径。所以,你必须这样做:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteRule ^ /app.php [L] 
  • ^(.*)$ 没有必要这样做,因为您只是在不考虑 URI 的情况下重写。
  • 标记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/ 被重定向到 / 这是我的问题,原始 .htaccess它不会那样做。
  • @Leo 您的 htaccess 中还有哪些其他规则?
  • 这是我的 .htaccess 中唯一的东西,而 vhosts 只有你之前帮助我完成的 www 到非 www 重写。
猜你喜欢
  • 2012-08-08
  • 2018-10-19
  • 1970-01-01
  • 2012-09-10
  • 2013-10-21
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 2012-07-31
相关资源
最近更新 更多