【问题标题】:Masking filename looking URL with PHP使用 PHP 屏蔽文件名查找 URL
【发布时间】:2013-02-07 20:22:01
【问题描述】:

因为这是第一次有人让我点击一些推荐链接,所以我很好奇。在屏幕截图中,您将看到一个被屏蔽的 url,它直接指向其他站点中的某个推荐链接。

引起我注意的有趣部分以及我单击链接的原因是该链接具有文件扩展名,您会注意到。我可以想到 PHP 重定向、.htaccess 重定向,但不能完全想到文件名屏蔽的解决方案。

通常我们可以解析 .htaccess 中的 url 并将 .zip 扩展名重定向到 php 文件,以检查文件是否是有效的文件名或数据库中重定向的键值(这也是一个解决方案)但我没有请注意此链接上的任何重定向。

还有其他可能的方法吗?

【问题讨论】:

  • 也许this 会有所帮助
  • 仅仅因为一个 url 看起来像它指向一个文件并不意味着在路径中实际上有一个文件看起来像 URL 中的内容。不需要客户端可见的重定向来处理 path_info 或内部 mod_rewrite 内部重定向。

标签: php .htaccess url-masking


【解决方案1】:

您可以使用 .htaccess 重定向任何请求。例如:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

会将所有请求重定向到index.php,您可以在其中检查用户是否需要file.zip,只需查看$SERVER['REQUEST_URI']。然后为他提供你想要的文件:

$zip = '/path/to/zip/file/outside/the/web/root.zip';

// set correct headers, so the browser identifies the response as a zip file
header('Content-type: application/zip;');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($zip) . ';');
header('Content-Disposition: attachment; filename="whatever.zip";');

// output the file contents
readfile($zip);

【讨论】:

  • 也适用于一个特定的文件RewriteRule ^download.zip download.php [L,NC],因此如果您在浏览器链接 www.domain.com/download.zip 中打开,它将执行 download.php 文件中的所有代码
  • 是的,但现在更常见的是将任何请求重定向到路由器脚本,该脚本决定要执行的功能或显示的模板
  • 但是所有页面中的文件名都发生了变化,所以像RewriteRule ^download/(.+?)/(.+?).zip download.php?id=$2 [L,NC] 这样的东西会用第二个参数执行下载php?
【解决方案2】:

使用.htaccess 可以重写任何请求。链接看起来像 zip 文件,但请求被发送到一些 php 脚本。

这个 php 文件解析请求的 URI,做它应该做的事情(增量计数器,发送钱,..)并且只有在所有这些东西给你文件之后。

【讨论】:

    猜你喜欢
    • 2017-11-16
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多