Вопрос или проблема
Я добавил эту строку в файл конфигурации nginx
try_files $uri $uri/ /index.php?$args;
rewrite ^([^.]*[^/])$ $1/ permanent; #добавление слэша
Постоянные ссылки работают нормально, но при добавлении слэша (пожалуйста, посмотрите правило переписывания, как я его добавляю) NGINX выдает ошибку 404.
Например,
somedomain.com/post/ThisIsPermaLink (работает)
после добавления слэша
somedomain.com/post/ThisIsPermaLink/ (выдает ошибку 404)
Но обе эти версии работают в среде Apache.
Apache перенаправляет все запросы без слэшей (somedomain.com/post/ThisIsPermaLink) на somedomain.com/post/ThisIsPermaLink/
Поэтому мне нужна такая же функциональность в NGINX
Я не думаю, что вам нужно это правило переписывания для добавления слэша. WordPress выполнит перенаправление за вас.
Я использую этот код для отладки перенаправления:
function wpse_287994_debug_redirect( $url ) {
echo $url;
die();
}
add_action( 'wp_redirect', 'wpse_287994_debug_redirect' );
Когда я пытаюсь посетить адрес http://example.com/lorem-ipsum
(эта страница должна существовать), вышеуказанный скрипт выведет http://example.com/lorem-ipsum/
, так что перенаправление на адрес со слэшем работает.
Моя конфигурация nginx выглядит следующим образом:
server {
listen *:80;
server_name example.com;
root /var/www/example;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
index index.php index.html;
location / {
# попытка обслужить файл напрямую, резервный вариант - index.php
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9070;
}
}
В Nginx переписывания уже выполняются этой частью try_files $uri $uri/ /index.php?$args;
. Эта часть означает нечто подобное.
Для местоположения, начинающегося с символа /
, попытка загрузить файл из файловой системы, и если такого файла нет, переписать на index.php
с аргументами.
Попробуйте следующее:
Замените:
try_files $uri $uri/ /index.php?$args;
на:
try_files $uri $uri/ /index.php$is_args$args;
В файле конфигурации nginx для вашего сайта.
Затем в постоянных ссылках (настройки WordPress)
Ответ или решение
Решение проблемы с пермаликами в WordPress на NGINX
При переходе с Apache на NGINX многие пользователи WordPress сталкиваются с проблемой, связанной с тем, что перма-линки (постоянные ссылки) не работают должным образом. В вашем случае проблема в том, что ссылки с завершающим слэшем (/) возвращают ошибку 404. Это связано с тем, что конфигурация NGINX не обрабатывает такие запросы подобным образом, как это делает Apache.
Анализ конфигурации и настройки
Ваше текущее правило в конфигурации NGINX:
try_files $uri $uri/ /index.php?$args;
rewrite ^([^.]*[^/])$ $1/ permanent; #adding slash
Первоначально вы добавили правило, которое должно было добавлять слэш в конце URL при его отсутствии. Однако взаимодействие между try_files
и правилом переписи может создавать конфликты, что в конечном итоге приводит к ошибке 404 при запросе URL с завершающим слэшем.
Проблема с отсутствием слэша
Согласно стандартам HTTP и правилам WordPress, URL без завершающего слэша должен перенаправляться на его версию с завершающим слэшем. В NGINX это может быть реализовано с помощью правильной настройки try_files
.
Рекомендуемое решение
Для исправления данной проблемы, измените одну строку в вашей конфигурации NGINX:
try_files $uri $uri/ /index.php$is_args$args;
Это изменит способ передачи аргументов в index.php
и устранит конфликты, которые возникают из-за отсутствия слэша в URL. Теперь, когда NGINX не сможет найти файл или директорию, он будет корректно перенаправлять запросы к index.php
, передавая правильно аргументы, если они присутствуют.
Пример полной конфигурации
Ваша полная конфигурация может выглядеть следующим образом:
server {
listen *:80;
server_name example.com;
root /var/www/example;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9070;
}
}
Обновление настроек пермалинков
После внесения изменений в конфигурацию NGINX, рекомендуется зайти в административную панель WordPress и обновить настройки постоянных ссылок (пермалинков). Это заставит WordPress пересоздать свои правила и удостовериться, что все ссылки работают корректно.
Заключение
Следуя вышеизложенным рекомендациям, вы сможете устранить проблемы с пермаликами на вашем сайте WordPress, работающем на NGINX. Это обеспечит удобство навигации и улучшит общее восприятие вашего сайта пользователями.
Проблемы с настройками могут возникнуть даже у опытных администраторов, поэтому важно внимательно проверять каждую строку конфигурации и проводить тестирование после внесения любых изменений.