Вы можете сделать это следующим образом (в 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, но это не очень помогает, если мой URLокончание image.png не является допустимым 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.