PHP伪造的URL解析为GET或类似的

时间:2018-09-30 06:23:06

标签: php laravel rest url get

我今年年初曾与laravel合作,我喜欢使用url访问REST客户端的想法。我想知道如何将不存在的URL重定向到现有的URL并保留该GET数据。

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

谢谢!

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

1 个答案:

答案 0 :(得分:-2)

您可以这样做(在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之前没有输出,而不是一个空格
  • 使用标头后调用退出。
  

来自不存在的URL

正如我所说的,我不使用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中可以“伪造”的东西。