Расположение совпадения NGINX Redirect

У меня есть сайт, на котором много маршрутов (Laravel 5.7)

Пара таких маршрутов

"/insurance-travel-landing"  
"/insurance-travel-anual"

Мне нужно указать установку WordPress на

"/insurance-travel" 

Я сделал это с местоположением NGINX, но у меня есть такая проблема:

Когда я пишу "/insurance-travel" в URL, работает нормально, но когда я пишу /insurance-travel-landing или /insurance-travel-anual, я получаю ошибку 404 WordPress.

Я пробовал указать местоположение с точным соответствием ("location = / insurance-travel") но у меня проблема с расположением php.

My Nginx Config (работает страхование путешествий, но остальные не работают)

location = /insurance-travel {
             alias /var/www/html/landing-travel;
             index index.php;
             if (!-e $request_filename) { rewrite   /insurance-travel/index.php last; }
                    location ~ \.php$ {
                    if (!-f $request_filename) { return 404; }
                    fastcgi_pass unix:/run/php/php7.1-fpm.sock;

                    include /etc/nginx/fastcgi_params;
                    fastcgi_param  SCRIPT_FILENAME $request_filename;
              }


    }

Моя конфигурация, когда я помещаю = в местоположение

location = /insurance-travel {
             alias /var/www/html/landing-travel;
             index index.php;
             if (!-e $request_filename) { rewrite   /insurance-travel/index.php last; }
                    location ~ \.php$ {
                    if (!-f $request_filename) { return 404; }
                    fastcgi_pass unix:/run/php/php7.1-fpm.sock;

                    include /etc/nginx/fastcgi_params;
                    fastcgi_param  SCRIPT_FILENAME $request_filename;
              }


    }

Nginx скажи мне это

nginx: [emerg] location "\.php$" cannot be inside the exact location "/insurance-travel".

Как я могу это исправить?

Спасибо!

Редактировать:

Серверный блок

server {
server_name xx.xx.xx;
listen 443 ssl http2;

ssl_certificate /etc/letsencrypt/live/xx/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xx/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/xx/fullchain.pem;
include /etc/nginx/snippets/ssl.conf;

root "/var/www/html/xx/current/public";
index index.php index.html;
location / { 
     try_files $uri $uri/ /index.php?$query_string;
}
location  /insurance-travel{
             alias /var/www/html/landing-travel;
             index index.php;
             if (!-e $request_filename) { rewrite   /insurance-travel/index.php last; }
             location ~ \.php$ {
                if (!-f $request_filename) { return 404; }
                fastcgi_pass unix:/run/php/php7.1-fpm.sock;

                include /etc/nginx/fastcgi_params;
                fastcgi_param  SCRIPT_FILENAME $request_filename;
          }

    }
sendfile off;

    client_max_body_size 100m;

    location ~ \.php$ {
           fastcgi_split_path_info ^(.+\.php)(/.+)$;
           fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
           fastcgi_index index.php;
           include fastcgi_params;
           fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
           fastcgi_intercept_errors off;
           fastcgi_buffer_size 16k;
           fastcgi_buffers 4 16k;
           fastcgi_connect_timeout 300;
       fastcgi_send_timeout 300;
               fastcgi_read_timeout 300;
    }

 }

У вас не может быть вложенной директивы местоположения. Переместить расположение .php на корневой уровень

num8er 10.11.2018 10:57

Где вы находитесь в других местах? ниже location = /insurance-travel или выше?

Mahdi Jedari 10.11.2018 11:16
location = /insurance-travel соответствует точный. Думаю, вы хотите удалить =?
Travis Britz 10.11.2018 11:36

@ num8er Я пытался это сделать, но не могу понять, как это сделать. Когда я получаю доступ к страховке путешествий, nginx возвращает ошибку 404

Nacho 10.11.2018 13:12

@MahdiJedari Остальные местоположения не определены в nginx. У меня есть основной сайт и несколько перенаправлений внутри, которые указывают на другой каталог на том же сервере.

Nacho 10.11.2018 13:13

@TravisBritz Я попытался удалить =, и у меня такая же проблема (отображается страхование путешествий, но другие маршруты не являются ошибкой 404). Другие маршруты не определены, они вызываются из маршрута laravel.

Nacho 10.11.2018 13:17

Показывать блок server нужно целиком - в его нынешнем виде вопрос лишен смысла.

Richard Smith 10.11.2018 13:19

@RichardSmith Я только что отредактировал свой вопрос. Спасибо

Nacho 10.11.2018 13:32

Я предполагаю, что нижний блок location ~ \.php$ предназначен для запуска Laravel. Вам необходимо использовать location ^~ /insurance-travel, чтобы ваш вложенный блок location ~ \.php$ мог запускать WordPress.

Richard Smith 10.11.2018 13:45

@RichardSmith Я пробовал, и wordpress работает нормально, когда я настраиваю местоположение с помощью этого ^ ~. Таким образом, маршрут insurance-travel работает, но другие маршруты в laravel с именем insurance-travel-anual перестают работать (я думаю, это потому, что два URL-адреса имеют одно и то же имя).

Nacho 10.11.2018 13:51

Ах я вижу. Вы могли бы использовать location ^~ /insurance-travel/, чтобы избежать двусмысленности. Вы можете добавить location = /insurance-travel { rewrite ^ /insurance-travel/ last; } для обработки граничного состояния.

Richard Smith 10.11.2018 14:07

@RichardSmith Я пробовал, но не работает. Проверьте это (это настоящий сайт), у меня есть development.heymondo.es/seguro-de-viaje (который является приземлением wordpress), но также у меня есть development.heymondo.es/seguro-de-viaje-temporal (который обрабатывается laravel). Если я поставлю nginx с вашей конфигурацией, работать будет только с лендингом wordpress.

Nacho 10.11.2018 14:13

Извините, вам также необходимо добавить завершающий / к значению alias.

Richard Smith 10.11.2018 14:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
13
482
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Итак, вы хотите, чтобы /insurance-travel имел доступ к WordPress, но /insurance-travel-xxx продолжал обрабатываться Laravel.

Вы можете настроить местоположение так, чтобы любой URI, начинающийся с /insurance-travel/, обрабатывался WordPress, и добавить явное правило - единственный URI /insurance-travel.

Например:

location = /insurance-travel {
    rewrite ^ /insurance-travel/ last;
}
location ^~ /insurance-travel/ {
    alias /var/www/html/landing-travel/;
    index index.php;
    if (!-e $request_filename) { rewrite ^ /insurance-travel/index.php last; }

    location ~ \.php$ {
        if (!-f $request_filename) { return 404; }
        fastcgi_pass unix:/run/php/php7.1-fpm.sock;

        include /etc/nginx/fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $request_filename;
    }
}

Большое спасибо, Ричард. Последняя конфигурация работает как положено !. Еще раз большое спасибо!

Nacho 10.11.2018 14:28

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