美好的一天。 我在项目中有以下结构:
/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
那么,为什么它没有重定向到控制器?
答案 0 :(得分:0)
AFAIR,如果目标文件存在(规则指向重写前的目录/文件),mod_rewrite将忽略该规则。如果您想通过mod_rewrite捕获libs
时想要传递/dir
,那肯定会发生这种情况。这是不可能的,AFAIK。
无论如何 - 如果您要过滤权限,请将/dir
文件夹移到upload
之外。
然后:创建具有此结构的路线并使用:http://symfony.com/doc/current/components/http_foundation/introduction.html#serving-files
这是实现这一目标的最可靠方法。到目前为止,越来越多的人正在将重写规则直接转移到应用程序。那没关系。特别是如果您的HTTPd支持web
。那么开销很小。