mod_rewrite与“选项索引”结合使用

时间:2010-04-22 01:26:10

标签: php apache mod-rewrite

我有一个目录(“files”),其中将创建子目录和文件并随时间存储。这些目录还需要使用“选项索引”来提供目录列表,但前提是用户经过身份验证和授权。通过执行以下操作,我构建并工作了该部分:

<Directory /var/www/html/files>
  Options Indexes
  IndexOptions FancyIndexing SuppressHTMLPreamble
  HeaderName /includes/autoindex/auth.php
</Directory>

现在我需要处理文件传递。为了强制对文件进行身份验证,我构建了以下内容:

RewriteCond %{REQUEST_URI} -f
RewriteRule /files/(.*) /auth.php

我也尝试过:

RewriteCond %{REQUEST_URI} !-d
RewriteRule /files/(.*) /auth.php

当我请求时,两个指令都没有重定向到auth.php:

foo.com/files/bar.pdf
foo.com/files/baz/bar.pdf

想法?

1 个答案:

答案 0 :(得分:0)

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^/files/(.*) /auth.php?file=$1 [NC,L]
  • 不确定这是否有问题,但我使用REQUEST_FILENAME而不是REQUEST_URI
  • 确保使用RewriteEngine on
  • 启用了重写功能
  • 如果您希望将捕获(.*)的值传递给脚本,则需要使用$1
  • 告诉Apache如何/在何处传递值
  • 在规则的开头添加^,以确保您匹配/files/blah.txt,而不是/foo/files/blah.txt
  • 添加[NC,L]告诉Apache使用不区分大小写的匹配并停止处理此匹配的规则。