htaccess .zip url 从 /*.zip 重写为 /key/*.zip

htaccess .zip url 从 /*.zip 重写为 /key/*.zip

目前,我的 php/apache 网络服务器的 http 根目录中存储了一些 zip 文件。

目前我可以使用以下命令访问文件:

http://example.com/filename.zip

但是,我想“保护”对这些文件的访问,并且只能使用类似以下方式访问它们:

http://example.com/key/filename.zip

有人可以帮我创建一个重写规则来做到这一点吗?

密钥是固定字符串。它将被硬编码在.htaccess规则中。


当用户访问以下URL时:

http://example.com/key/filename.zip

他应该能够下载该 zip 文件。


当用户访问以下URL时:

http://example.com/filename.zip

他应该无法下载 zip 文件。他应该会收到 http 错误。


我迄今为止的代码:

RewriteEngine on
RewriteRule ^key/(\w+).zip $1.zip

答案1

/filename.zip您现有的代码在访问时应该已经可以发挥作用/key/filename.zip(尽管应该稍微整理一下)。

要阻止对的直接请求/filename.zip,您可以在现有指令之前执行如下操作:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^/?\w+\.zip$ - [F]

这会阻止(403 禁止)全部直接请求表单的 URL /filename.zip(在文档根目录中),无论它是否映射到现有文件。

或者,要发送 404,请将标志更改FR=404

总结一下:

RewriteEngine On

# Block direct requests to /<filename>.zip
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^/?\w+\.zip$ - [R=404]

# Internally rewrite /key/<filename>.zip to /<filename>.zip
RewriteRule ^/?key/(\w+)\.zip /$1.zip [L]

请记住使用反斜杠转义点以匹配文字点。

请注意,这将无条件重写对/key/<filename>.zip的所有请求/<filename>.zip,无论是否/<filename>.zip存在。如果不存在,您只会得到 404。

L如果您有其他后续指令,则可能需要该标志。

我已经修改了指令,以便它们可以在服务器配置中工作(以及.htaccess)。

相关内容