PHP поддельный URL для разбора в GET или аналогичный - PullRequest
0 голосов
/ 30 сентября 2018

Я работал с laravel ранее в этом году, и мне понравилась идея использовать url для доступа к REST-клиенту.Мне было интересно, как я мог бы перенаправить с несуществующего URL-адреса на существующий URL-адрес и сохранить эти данные GET.

Возможно ли это даже с текущей реализацией php?

Спасибо вadvance!

EDIT: Например, допустим, я хочу разрешить зарегистрированным пользователям загружать файлы.Указанный файл будет загружен по следующему адресу: http://example.ex/image.png Но если я просто помещу свой файл image.png в корень моего веб-сервера, он будет доступен для загрузки любому пользователю, так как это прямая ссылка.Как бы я использовал тот же URL, но для предоставления index.php $_GET['url'] = image.png, чтобы я мог дать пользователю временную ссылку для скачивания, если пользователь вошел в систему.

1 Ответ

0 голосов
/ 30 сентября 2018

Вы можете сделать это следующим образом (в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...