【问题标题】:mod_rewrite not redirecting to controller from subfolder(Symfony 2)mod_rewrite 不从子文件夹重定向到控制器(Symfony 2)
【发布时间】:2016-02-17 04:50:39
【问题描述】:

美好的一天。 我在项目中有以下结构:

/project
   ...
   /web
      /uploads
          .htaccess
          test.txt
      .htaccess // Symfony htaccess

我想将所有对/uploads/test.txt 的请求重定向到一个单独的控制器,该控制器决定用户是否有权读取test.txt 文件。

/web/uploads/.htaccess的内容如下:

RewriteEngine On
Options +FollowSymLinks
RewriteRule ^(.*)uploads/test.txt$ /app_dev.php/uploader/test [PT,L,QSA]

问题是这个 htaccess 文件永远不会将请求重定向到控制器操作(上传器/测试指向正确的控制器和操作)。 它只返回uploads/test.txt 文件。日志显示文件只是通过启用/禁用 PT 标志传递。

[Mon Nov 16 07:40:40.823485 2015] [rewrite:trace3] [pid 27811] mod_rewrite.c(468): [client 192.168.142.1:61956] 192.168.142.1 - - [test.lh/sid#b6329d90][rid#b63fe058/initial] [perdir /var/www/test/web/uploads/] applying pattern '^(.*)uploads/test.txt$' to uri 'test.txt'
[Mon Nov 16 07:40:40.823500 2015] [rewrite:trace1] [pid 27811] mod_rewrite.c(468): [client 192.168.142.1:61956] 192.168.142.1 - - [test.lh/sid#b6329d90][rid#b63fe058/initial] [perdir /var/www/test/web/uploads/] pass through /var/www/test/web/uploads/test.txt

那么,为什么它没有重定向到控制器?

【问题讨论】:

  • 您是否检查过您的 .htaccess 上游某处没有 RewriteCond %{REQUEST_FILENAME} -f [NC,OR] ?就像在你的 apache 虚拟主机配置中一样?
  • 不,我在 vhost 配置中没有类似的东西。我已删除子文件夹中的 .htaccess,并将“test.txt”的重写规则移至 Symfony htaccess 的顶部。仍然没有正确重定向。

标签: php apache .htaccess symfony mod-rewrite


【解决方案1】:

AFAIR,如果目标文件存在(规则指向重写前的目录/文件),mod_rewrite 忽略该规则。如果您想通过 mod_rewrite 捕获 /dir 时想通过 /dir,那肯定会发生。这是不可能的,AFAIK。

无论如何 - 如果您想过滤权限,请将 upload 文件夹移到 web 之外。

然后:创建一个具有这种结构的路由并使用:http://symfony.com/doc/current/components/http_foundation/introduction.html#serving-files

这是实现这一目标的最可靠方法。到目前为止,越来越多的人将重写规则直接转移到应用程序中。没关系。特别是如果您的 HTTPd 支持 X-Sendfile。那么开销是最小的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 2013-03-26
    • 2011-11-22
    相关资源
    最近更新 更多