目前我有一些zip文件存储在我的PHP / Apache Web服务器的http根。
目前我可以使用这个访问文件:
http://example.com/filename.zip
但是,我想“保护”这个文件的访问权限,而且他们只能使用类似这样的方式进行访问:
http://example.com/key/filename.zip
有人可以帮我创build一个重写规则来做到这一点?
关键是一个固定的string。 它将在.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
您访问/key/filename.zip时,您现有的代码应该已经提供/filename.zip (尽pipe应该整理一下)。
要阻止对/filename.zip直接请求,可以在现有指令之前执行以下操作:
RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteRule ^/?\w+\.zip$ - [F]
这会阻止(403 Forbidden) 所有对/filename.zip (在文档根目录中)URL的直接请求,而不pipe它是否映射到现有文件。
或者,要发送404,请将F标志更改为R=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]
请记住反斜杠转义点以匹配文字点。
请注意,无论是否存在/<filename>.zip ,无条件地将/<filename>.zip所有请求重写为/key/<filename>.zip 。 如果没有,你只会得到一个404。
如果您有其他指令,则可能需要L标志。
我已经修改了这些指令,所以他们将在服务器configuration(以及.htaccess )中工作。