Маршрут laravel с www не работает, но работает не www - PullRequest
0 голосов
/ 06 января 2019

У меня есть 1 поддомен, все мои маршруты определены в web.php, разделены маршрутом поддомена Например: admin.example.test, example.test

Я размещаю свой сайт на камердинере, я пытаюсь заставить работать маршруты как с www, так и без www, не-www работает нормально, но когда я добавляю в www, он покажет мне: «Извините, страница, которую вы ищете, не найдена. "

Я также добавил htaccess в общую папку для перенаправления www на сайт без www, но, похоже, он не работает:

<IfModule mod_rewrite.c>
    RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
    RewriteCond %{HTTPS}s ^on(s)|
    RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

Я что-то не так делаю? Разве laravel не должен работать с или без www и не нуждаться в файле htaccess?

p / s: это не работает на моем виртуальном хостинге, а также с реальным доменным именем

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Я думаю, что Laravel должен работать с маршрутизацией на поддомене , хотя вам понадобятся дублирующие маршруты: один для www и другой для версии без www. Но вы можете использовать одну и ту же функцию для нескольких маршрутов. Если вы предпочитаете использовать правила переписывания Apache, ознакомьтесь с приведенными ниже инструкциями.

Подготовка к переписыванию правил

В контекстах каталогов (то есть в .htaccess файлах), RewriteEngine on должен быть установлен в файле для работы правил перезаписи. Кроме того, на уровне сервера (т.е. в файле httpd.conf) должен присутствовать Options FollowSymLinks. Блок конфигурации обычно будет выглядеть следующим образом:

<IfModule mod_rewrite.c>
    RewriteEngine On
    # ... your rewrite rules
</IfModule>

Исправление сбойного условия перезаписи

В Apache RewriteRule будет выполняться, только если выполнены два RewriteCond, указанные выше. Взгляните на первое условие перезаписи:

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$

%{HTTP_HOST} - это здесь имя хоста маршрута www (здесь admin.example.test), и оно должно соответствовать шаблону ^[^.]+\.[^.]+$ для выполнения перезаписи. Но регулярное выражение допускает только одну точку в имени хоста. Таким образом, имена хостов с двумя или более точками (то есть subdomain.example.test) не соответствуют регулярному выражению, следовательно, ошибка перезаписи от www.example.test. Вместо этого вы должны использовать следующее для поддержки поддоменов:

RewriteCond %{HTTP_HOST} ^[^.]+(\.[^.]+)*$

Блок конфигурации находится на правильном [виртуальном] хосте?

Возможно нет. Поскольку вы перенаправляете с веб-сайта на сайт без веб-сайта (возможно, с www.example.test на example.test), RewriteRule не будет работать, а вместо этого перенаправит на www.www.example.test. Это, вероятно, не то, что вы хотите. Я думаю, что это решение будет работать:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.[^.]+(\.[^.]+)*$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://yourhostname%{REQUEST_URI} [L,R=301]

где yourhostname - имя хоста версии без www. Он проверяет, начинается ли имя хоста с www. и также совместимо с поддоменами. И вам даже не нужно перезагружать сервер, поскольку файлы .htaccess читаются при каждом запросе!

Если вам нужна дополнительная помощь

0 голосов
/ 06 января 2019

Вам нужно создать подходящую запись CNAME для этого примерно так:

www
mysite.com.

Как правило, это может быть сделано графическим интерфейсом вашего провайдера, например digital ocean.

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