我今年年初曾与laravel合作,我喜欢使用url访问REST客户端的想法。我想知道如何将不存在的URL重定向到现有的URL并保留该GET数据。
使用当前的php实现是否有可能?
谢谢!
编辑:
例如,假设我要允许登录用户下载文件。该文件将从以下网址下载:context
但是,如果我将image.png放到Web服务器的根目录中,那么任何人都可以下载它,因为它是直接链接。我将如何使用相同的URL,但要为index.php提供http://example.ex/image.png
,因此如果用户登录,我可以给该用户一个临时下载链接。
答案 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中可以“伪造”的东西。