【问题标题】:PHP fake url to parse into GET or similarPHP 假 url 解析成 GET 或类似的
【发布时间】:2018-09-30 06:23:05
【问题描述】:

我今年早些时候使用过 laravel,我喜欢使用 url 访问 REST 客户端的想法。我想知道如何从不存在的 URL 重定向到现有的 url 并保留该 GET 数据。

当前的 php 实现是否有可能?

提前致谢!

编辑: 例如,假设我想允许登录用户下载文件。所述文件将从以下网址下载:http://example.ex/image.png 但是,如果我只是将 image.png 放到我的网络服务器的根目录中,那么任何人都可以下载它,因为它是一个直接链接。我将如何使用相同的 URL,但要为 index.php 提供$_GET['url'] = image.png,所以如果用户登录,我可以给用户一个临时下载链接。

【问题讨论】:

  • Is it even possible with the current php implementation 当然。但是没有任何代码就很难提供答案。
  • 我还没有任何代码,因为我目前正试图弄清楚如何开始。将用一个例子编辑我的问题
  • 回答你的问题,是的,有可能。
  • 您的第一步是查看.htaccess
  • @Ibu 我会这样做的,谢谢。你能把它改成答案,这样我就可以把它标记为已回答?

标签: php laravel rest url get


【解决方案1】:

你可以这样做(在 PHP 中)我不编写 Laravel 代码

 $arr_url = parse_url('http://example.com/old_location?foo=bar');
 $query = !empty($arr_url['query']) ? '?'.$arr_url['query'] : '';

 header("Location: http://example.com/new_location{$query}");
 exit;

或者你可以使用$_SERVER(我忘了它是否包含?

   $query = !empty($_SERVER['QUERY_STRING']) ? '?'.$_SERVER['QUERY_STRING'] : '';
   header("Location: http://example.com/new_location{$query}");

两件重要的事情。

  • 在调用 header 之前没有输出,甚至没有一个空格
  • 使用标头后调用退出。

来自不存在的网址

正如我所说,我不使用 Laraval,所以我无法谈论它如何处理 404,因此您需要在处理该问题的控制器中进行重定向,这需要一些逻辑来决定重定向或不是。

更新

我想在 PHP 中执行此操作,但如果我的以 image.png 结尾的 URL 不是有效的 php 文件,这将无济于事。

access REST 意味着它将是一个PHP 文件。如果您只是想查找文件是否存在并重定向,请使用 HTACCESS

#if not is a real file
RewriteCond %{REQUEST_FILENAME} !-f
//redirect

你如何决定重定向到哪里是一个悬而未决的问题,因为这是一个广泛的问题,我无法给出具体的答案。

最后一件事是您的.png 示例。可以使用.php 文件返回具有正确标题的图像数据。我曾经建立了一个网站,将用户图像存储在 Zip 文件中,然后仅在用户登录时才显示图像,方法是从 ZIP 流式传输文件的内容(无临时文件)。

服务器返回的所有内容都是文本,它被视为图像的唯一原因是因为 Apache 知道 .png 应该有 Content-type: image/jpng 或类似的内容标题。在 PHP 中可以“伪造”的东西。

【讨论】:

  • 我想用 PHP 来做,但是如果我的以 image.png 结尾的 URL 不是一个有效的 php 文件,这并没有真正的帮助。
  • access REST 这意味着它是一个 PHP 文件。如果不是,那么您可以使用 HTACCESS,但您必须确定什么是有效的 url
  • 唯一的症结在于决定将它发送到哪里,并捕获那些 404 并将它们发送到可以做出决定的地方。
猜你喜欢
  • 2011-08-20
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 2011-01-15
相关资源
最近更新 更多