隐藏或混淆文件的url路径

时间:2011-01-29 16:47:27

标签: php apache url-rewriting

我允许用户在他们自己的帐户下将.jpg,.pdf .doc .xls文件上传到我的网络服务器,然后他们可以稍后点击文件名在浏览器中查看文档,或者视情况而定。 doc .xls,他们通过默认的浏览器提示下载它。

我想隐藏/模糊url路径,因此他们不知道到达文件的确切路径,希望保护文件不受其他帐户/用户的影响。

我正在使用php,apache

以下是示例路径:

http://dev.site.com/administrator/account_files/1/documents/property_docs/1_68_1295980609myfile.pdf

我怎样才能将网址隐藏起来更像:

http://dev.site.com/1_68_1295980609myfile.pdf

主要目的是删除对“administrator / account_files / ....”的引用

我能用apache的mod_rewrite吗?我读过其他一些帖子,其中人们使用php的readfile()并使用了不同的页面,但我想知道这样做是否会有一些性能问题。

感谢您的建议。

3 个答案:

答案 0 :(得分:0)

您需要创建一个表来读取和存储路径。例如,查看http://bit.ly等网站的工作方式;基本上他们为URL分配一个唯一的字符串,这就是你要做的事情。

有许多PHP脚本可以为您缩短网址,从而屏蔽路径,只需执行Google search

答案 1 :(得分:0)

它可能会花费您一些性能,但在使用readfile时可能不会产生任何实际问题。这不是很多开销。无论如何都必须读取该文件,因此运行PHP脚本只需要一点点开销。

我这样做,您甚至可以选择将文件存储在Web根目录之外的文件夹中,或者存储在受.htaccess密码保护的文件夹中。这两种技术都不会使readfile无法读取文件,因此两者都是真正阻止实际文件被外部读取的好方法。

答案 2 :(得分:0)

您应该强制PHP下载该文件:

<?php
$file = 'path/to/your/file.zip';
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$file");
header("Content-Type: application/zip"); // change to a specific mime type
header("Content-Transfer-Encoding: binary");