Рубрики
Uncategorized

Laravel На Общем Хостинге

Прежде чем мы начнем, стоит дополнить этот пост сообщением: это всегда более желательно и рекомендуется… Помеченный php, laravel.

Прежде чем мы начнем, стоит дополнить этот пост сообщением: Всегда более желательно и рекомендуется обслуживать приложения Laravel из специальной среды хостинга .

Есть из чего выбирать, начиная с инструментов первой партии, таких как Forge и Vapour для более общих поставщиков, таких как DigitalOcean , AWS и GCP .

Однако, поскольку я нахожусь в аналогичной ситуации, могут возникнуть ситуации, когда вам придется развертываться в среде cPanel.

Я собираюсь рассказать об обычном довольно простом перенаправлении, которое вы видите в Интернете, но, что более важно, о втором шаге, который обычно не учитывается. Этот второй шаг может оказать огромное влияние на ваш SEO.

Перенаправление

Как вы, возможно, нашли в другом месте, есть простое перенаправление, которое вы можете поместить в корневую папку вашего проекта:

# Internally rewrite all top-level requests to the public directory

    RewriteEngine On
    RewriteRule ^(.*)$ public/$1 [L]

Это очень просто и просто перенаправляет все из корня вашего сайта public_html вниз в папку public вашего проекта Laravel.

Оттуда .htaccess , предоставляемый Laravel, будет принимать и маршрутизировать входящие запросы.

Работа выполнена? Может быть, и нет…

Проблема SEO

Проблема с вышеуказанным перенаправлением заключается в том, что оно не предотвращает доступ ко ВСЕМ вашим URL-адресам с префиксом /public/ . Так что оба / и /общедоступный/ будет обслуживать домашнюю страницу ваших приложений!

Это, очевидно, плохо сказывается на любых усилиях по SEO, которые вы планируете предпринять на сайте, так как теперь у вас есть дубликаты страниц, и, кроме того, если кто-то наткнется на эти URL-адреса, это не очень хорошо для пользователей.

Я потратил некоторое время, пробуя перенаправления, чтобы предотвратить это от Сам файл .htaccess , но оказался пустым. В моем конкретном случае это сервер cPanel с установленным Litespeed. И я знаю по опыту, что это не совсем на 100% похоже на Apache.

Решение

Поскольку подход .htaccess оказался пустым, я выбрал решение для промежуточного программного обеспечения. Опять же, это не идеально, так как на самом деле это не ответственность приложений но мы все равно не в идеальной ситуации.

Это довольно простое промежуточное программное обеспечение, оно ищет общедоступный префикс и возвращает перенаправление 301, если найдено. Это означает, что у вас не может быть URL-адресов, начинающихся с public, но в нашем случае это не было проблемой:

getRequestUri(), '/public') === 0) {
            return redirect()
                ->to($request->getSchemeAndHttpHost() . '/' . substr($request->getRequestUri(), 8))
                ->setStatusCode(301);
        }
        return $next($request);
    }
}

Опять же, это не идеально, но подходит для наших целей.

Добавьте это в свой глобальный стек промежуточного программного обеспечения, прежде чем что-либо еще.

Обратите внимание, как мы используем метод $request->getRequestUri() , а не просто $request->путь() . Поскольку путь будет зависеть от перезаписи серверов.

Теперь любые запросы на public будут перенаправляться с помощью 301, и вы не будете обслуживать дублирующиеся страницы.

Оригинал: “https://dev.to/leemason/laravel-on-shared-hosting-51g2”