У меня есть сайт, на котором много маршрутов (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;
}
}
Где вы находитесь в других местах? ниже location = /insurance-travel или выше?
location = /insurance-travel соответствует точный. Думаю, вы хотите удалить =?
@ num8er Я пытался это сделать, но не могу понять, как это сделать. Когда я получаю доступ к страховке путешествий, nginx возвращает ошибку 404
@MahdiJedari Остальные местоположения не определены в nginx. У меня есть основной сайт и несколько перенаправлений внутри, которые указывают на другой каталог на том же сервере.
@TravisBritz Я попытался удалить =, и у меня такая же проблема (отображается страхование путешествий, но другие маршруты не являются ошибкой 404). Другие маршруты не определены, они вызываются из маршрута laravel.
Показывать блок server нужно целиком - в его нынешнем виде вопрос лишен смысла.
@RichardSmith Я только что отредактировал свой вопрос. Спасибо
Я предполагаю, что нижний блок location ~ \.php$ предназначен для запуска Laravel. Вам необходимо использовать location ^~ /insurance-travel, чтобы ваш вложенный блок location ~ \.php$ мог запускать WordPress.
@RichardSmith Я пробовал, и wordpress работает нормально, когда я настраиваю местоположение с помощью этого ^ ~. Таким образом, маршрут insurance-travel работает, но другие маршруты в laravel с именем insurance-travel-anual перестают работать (я думаю, это потому, что два URL-адреса имеют одно и то же имя).
Ах я вижу. Вы могли бы использовать location ^~ /insurance-travel/, чтобы избежать двусмысленности. Вы можете добавить location = /insurance-travel { rewrite ^ /insurance-travel/ last; } для обработки граничного состояния.
@RichardSmith Я пробовал, но не работает. Проверьте это (это настоящий сайт), у меня есть development.heymondo.es/seguro-de-viaje (который является приземлением wordpress), но также у меня есть development.heymondo.es/seguro-de-viaje-temporal (который обрабатывается laravel). Если я поставлю nginx с вашей конфигурацией, работать будет только с лендингом wordpress.
Извините, вам также необходимо добавить завершающий / к значению alias.






Итак, вы хотите, чтобы /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;
}
}
Большое спасибо, Ричард. Последняя конфигурация работает как положено !. Еще раз большое спасибо!
У вас не может быть вложенной директивы местоположения. Переместить расположение .php на корневой уровень