Назад | Перейти на главную страницу

Цикл перенаправления Wordpress без www на www в NginX

Я успешно развернул свой сайт WordPress на NginX. Мне нужны постоянные ссылки, чтобы быть http://www.example.com/%postname% и блог быть http://blog.example.com/%postname%. Он перенаправляет весь трафик с www на не-www, но когда я пытаюсь настроить его для перенаправления не-www на www, раскомментируя строки в конфигурационном файле mydomain для NginX, написанные ниже, браузер жалуется на цикл перенаправления.

Мой global / limits.conf:
http://pastebin.com/cLfMv6jC
а global / wordpress.conf:
http://pastebin.com/Uc9KSqhh

и файл конфигурации mydomain для NginX с серверными блоками:

server {
    server_name  _;
    return 301 $scheme://www.example.com$request_uri;
}

#server {
#    listen 80;
#    server_name example.com;
#    return 301 $scheme://www.example.com$request_uri;
#}

server {
    listen 80 default_server;
    listen [::]:80;

    root /usr/share/nginx/html/example.com;
    index index.php index.html index.htm;

    server_name www.example.com;

    include global/restrictions.conf;
    include global/wordpress.conf;

}

Пожалуйста, укажите на мою ошибку.
[Обновление] На самом деле у меня также есть следующий серверный блок:

server {
    listen 80;
    listen [::]:80;
    root /usr/share/nginx/html/mydomain_test;
    index index.php index.html index.htm;

    server_name test.example.com;

    include global/restrictions.conf;
    include global/wordpress.conf;

}

Я не понимаю, почему вы используете server_name _. Раньше это использовалось для обозначения сервера по умолчанию, но затем вы устанавливаете server_name www.mydomain.com строфа по умолчанию (listen 80 default_server).

Я бы переписал вашу конфигурацию так:

server {
    listen 80;
    listen [::]:80;

    server_name www.mydomain.com;

    root /usr/share/nginx/html/mydomain.com;
    index index.php index.html index.htm;

    include global/restrictions.conf;
    include global/wordpress.conf;

}

server {
    listen 80 default_server;
    server_name mydomain.com;
    return 301 $scheme://www.mydomain.com$request_uri;
}

Если приведенные выше модификации не работают, я бы сосредоточился на ваших включениях. Изолируйте их, создав простой /usr/share/nginx/html/mydomain.com/test.html и изменив первую строфу:

server {
    listen 80;
    listen [::]:80;

    server_name www.mydomain.com;

    root /usr/share/nginx/html/mydomain.com;
    index test.html

}

Затем проверьте, посетив www.mydomain.com и domain.com и посмотрите, направят ли оба вас к test.html вы создали. Если они это сделают, то раскройте их.

Ваша установка WordPress также способна перенаправить посетителя на тот, который, по его мнению, является правильным URL-адресом. Для этого он указывает заголовок Location: с помощью функции php header (). Итак, вы можете увидеть, что ваш сайт перенаправляется туда, куда вы сказали nginx, а затем wordpress отправляет его обратно.

В таблице wp_options установите для параметров siteurl и home значение uri www.domain.com.