Как использовать маршруты Laravel в качестве запасного варианта, когда физический файл не существует

Я хочу постепенно перенести очень старомодное PHP-приложение на Laravel. Приложение пока не использует общую точку входа, но использует для работы прямые URL-адреса файлов. Итак, чтобы постепенно переходить к функциональности, я хотел бы сначала проверить в своих маршрутах, существует ли URL-адрес в виде физического файла на сервере. Если это так, запустите этот файл. Если нет, пройдите маршруты laravel.

Я просматривал как превосходную публикацию в блоге «Legacy to Laravel » от Tighten, так и более старую статью на PHPArch « Миграция устаревших веб-приложений в Laravel». Они оба предполагают, что существует один интерфейсный контроллер, но в моем приложении это не так.

Каков был бы самый чистый способ реализовать это в Laravel 11?

Если все функции автономны, просто переместите эти .php файлы в папку public вашего приложения Laravel. Затем, как только вы реализовали эту функциональность, замените содержимое файла .php простым <?php header('Location: http://your-site/laravel/route');, чтобы переход непосредственно к этому URL-адресу .php перенаправлял вас на нужную страницу, обрабатываемую Laravel. Вот как мне приходилось переносить устаревшие приложения в новые, но это было только для 1 или 2 URL-адресов, которые люди добавили в закладки; может быть не лучшим решением, если у вас куча файлов .php, и в любом случае это кажется немного «хакерским».

Tim Lewis 09.08.2024 00:17

при использовании «красивых URL-адресов» это уже происходит: веб-сервер проверяет наличие существующих файлов и папок перед передачей их фронтальному загрузчику (точке входа вашего приложения)

lagbox 09.08.2024 00:17
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это должно быть тривиально просто. Если вы используете Apache, вам, вероятно, не нужно делать ничего особенного, Laravel уже должен работать таким образом. В каталоге /public Laravel вы получите файл .htaccess, который содержит что-то вроде этого:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Обратите внимание на условия. Если запрошенное имя файла не является каталогом и не является файлом, выполните перенаправление на фронт-контроллер. То есть, если запрошенное имя файла уже существует, Apache просто обработает его как есть, и вы полностью обойдете Laravel. Единственное, что вам может потребоваться сделать, это изменить имя одного из индексных файлов. Вероятно, у вас уже есть index.php для вашего устаревшего сайта, но Laravel захочет его использовать. Итак, вы можете сохранить существующее наследие index.php, переименовать index.php Laravel в laravel.php, а затем изменить .htaccess:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ laravel.php [L]

В nginx это может выглядеть примерно так:

location / {
    try_files $uri $uri/ /laravel.php?$args;
}

Так:

  • Запрос на http://example.com/old_page.php обрабатывается с /public/old_page.php
  • Запрос на http://example.com/new_page обрабатывается Laravel через фронт-контроллер на /public/laravel.php.

Другие вопросы по теме