Сниппет NGINX для ЧПУ в WordPress

Ниже приведен пример готовой конфигурации NGINX, позволяющей CMS WordPress корректно отображать ЧПУ (человеко-понятные урлы). В раздел location / конфигурационного файла сайта на WP (/etc/nginx/sites-available/sitename.ru) добавьте следующие строки:

if (!-e $request_filename) {
   rewrite ^.+/?(/wp-.*) $1 last;
   rewrite ^.+/?(/.*\.php)$ $1 last;
   rewrite ^(.+)$ /index.php?q=$1 last;
}

Полный листинг конфигурационного файла:

server {
    root /var/www/sitename.ru/public_html;
    index index.php index.html index.htm;
    server_name sitename.ru;
     
     location / {
                try_files $uri $uri/ =404;
                if (!-e $request_filename) {
                   rewrite ^.+/?(/wp-.*) $1 last;
                   rewrite ^.+/?(/.*\.php)$ $1 last;
                   rewrite ^(.+)$ /index.php?q=$1 last;
                }
        }
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}

Теперь протестируйте конфиг перезапустите NGINX:

$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ service nginx restart

И в админ-панели WordPress, в разделе Настройки — Постоянные ссылки, переключите флажок на опцию  «Название записи» или «Произвольно».

Настройка ЧПУ WordPress

6 комментариев

  1. Огромная Вам благодарность за Ваш труд!))
    Очень помогло в связке nginx+php-fpm.

  2. if (!-e $request_filename) {
    rewrite ^.+/?(/wp-.*) $1 last;
    rewrite ^.+/?(/.*\.php)$ $1 last;
    rewrite ^(.+)$ /index.php?q=$1 last;
    { <—скобочку в другую сторону:) Спасибо за запись

    1. Max, скобочка в примере — «в правильную сторону», т.к. она закрывает блок, который начался сразу после if. Вторая закрывающая скобочка закрывает первый блок location. 🙂

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *