【问题标题】:Can I use URL rewriting to hide the real file URL?我可以使用 URL 重写来隐藏真实的文件 URL 吗?
【发布时间】:2011-03-31 00:48:32
【问题描述】:

如果我有一个位于 http//site.com/files/foo.zip 的文件。

如何将此网址改写为http://site.com/download/foo.zip,以便用户的浏览器/下载管理器中根本不显示真实网址?

【问题讨论】:

    标签: php url-rewriting


    【解决方案1】:

    我假设你有 Apache,意思是 .htaccess

    RewriteEngine On
    RewriteRule ^download/(.*)$ files/$1 [R,L]
    

    否则,如果您确实想使用 PHP,则无论如何都需要通过 URL 重写将这些请求发送到 PHP 脚本。

    更新

    我想将下载权限限制为仅限注册用户。

    这不会那样做,最好的办法是将这些文件移动到文档根目录上方并通过 PHP 提供它们。

    例如...

    <?php
    // Get into your system's context so we can determine if the user is logged in.
    include 'everything.php';
        
    if ( ! $loggedIn) {
       die('Log in mate!'); // Handle this somewhat better :)
    }
    
    $file = $_GET['file'];
    
    // Get real path for $file.
    $file = basename(__FILE__) . '/above/doc/root/files/' . $file;
    
    if ( ! file_exists($file)) {
       die('This file does not exist!'); // And handle this better too.
    }
    
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
    

    【讨论】:

    • OP 可能需要内部重写:[L]。有一种需要隐藏原始 URL 的感觉。 [R] 本质上会通过 HTTP 重定向暴露原始 URL。
    • 好吧,我只想限制注册用户的下载权限。我想我需要以某种方式在 URL 更改之前检查用户是否已注册
    • @Alexandra 这不会阻止未注册用户下载任何内容,我会进行更新。
    • 谢谢。我使用dirname(ABSPATH).'/dir/'.$_GET['file'] 作为文件路径。所以现在有了一个不错的 URL 而不是 download.php 我只需要重写脚本路径
    【解决方案2】:

    对于中型文件,我也更喜欢下载脚本。设置起来更容易。

    但是您仍然可以使用 RewriteRule 方法进行一些作弊。这需要您从 PHP 创建临时授权文件:

     if ($user_is_authenticated) {
         touch("tmp/auth-{$_SERVER['REMOTE_ADDR']}");
     }
    

    那么你就可以用这个简单的规则保护real下载文件夹了:

     RewriteCond  ../tmp/auth-%{REMOTE_ADDR}   !-f
     RewriteRule  .+\.zip   /denied.html
    

    这种方法会产生一些管理开销。 - 您需要不时清理这些授权状态文件(cronjob)。此外,使用 IP 地址也不是最佳方法。会话 cookie 也可以,但更多涉及:Best strategy to protect downloadable files -php/mysql Apache2 server

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 2012-05-30
      • 2023-04-11
      • 1970-01-01
      • 2011-09-23
      • 2016-08-08
      • 2010-10-10
      相关资源
      最近更新 更多