首页 > 解决方案 > PHP 假 url 解析成 GET 或类似的

问题描述

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

当前的php实现甚至可能吗?

提前致谢!

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

标签: phplaravelresturlget

解决方案


你可以这样做(在 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 中可以“伪造”的东西。


推荐阅读