Страницы WordPress перенаправляются на корень в WordPress Multisite (подкаталог)

Вопрос или проблема

Я работаю с WordPress Multisite (с поддиректориями). Все работает нормально, кроме страниц WordPress. Когда я публикую страницу и пытаюсь ее посетить, она перенаправляется на главную мультисайтовую страницу.

Например, если страница находится по этому пути:

https://example.com/en-us/my-new-page/

она автоматически перенаправляется на:

https://example.com/en-us/

Или другой пример, если страница находится по этому пути:

https://example.com/es-es/my-really-new-page/

она автоматически перенаправляется на:

https://example.com/es-es/

Я использую плагин под названием Custom Permalinks, чтобы URL-адреса постов были более красивыми. Я использую nginx в качестве веб-сервера. Я разрабатываю сайт, поэтому в настоящее время на IP, а не на домене. Я перенаправляю текущий корневой домен https://example.com/ на главный путь мультисайта https://example.com/en-us/ с помощью плагина Redirection.

Это мой конфигурационный файл nginx:

upstream php-handler-http {
    server 127.0.0.1:9000;
    #server unix:/var/run/php5-fpm.sock;
}

map $http_host $blogid {
    default 0;
    include /var/www/html/wp-content/uploads/nginx-helper/map.conf;
}

server {
    listen 80 default_server;
    server_name 123.123.123.123;

    root /var/www/html/;
    index index.php;

    access_log /var/log/nginx/wordpress_http_access.log combined;
    error_log /var/log/nginx/wordpress_http_error.log;

    # set max upload size
    client_max_body_size 2G;
    fastcgi_buffers 64 4K;

    if (!-e $request_filename) {
        rewrite /wp-admin$ $scheme://$host$request_uri/ permanent;
        rewrite ^(/[^/]+)?(/wp-.*) $2 last;
        rewrite ^(/[^/]+)?(/.*\.php) $2 last;
    }

    location / {
        try_files $uri $uri/ /index.php?$args ;
    }

    location ~ \.php(?:$|/) {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_pass php-handler-http;
        fastcgi_read_timeout 600;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location ~* \.(htaccess|htpasswd) {
        deny all;
    }

    # set long EXPIRES header on static assets
    location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
        expires 24h;
        access_log off;
    }

}

Проверьте ваши перезаписи, чтобы убедиться, что они соответствуют этому

 if (!-e $request_filename) {
    rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
    rewrite ^/[_0-9a-zA-Z-]+.*(/wp-admin/.*\.php)$ $1 last;
    rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last;
}

Не этому

  if (!-e $request_filename) {
        rewrite /wp-admin$ $scheme://$host$request_uri/ permanent;
        rewrite ^(/[^/]+)?(/wp-.*) $2 last;
        rewrite ^(/[^/]+)?(/.*\.php) $2 last;
    }

Вы правильно настроили wp-config для мультисайта с поддиректориями? Отключите плагин Custom Permalink и проверьте без него, работает ли все. Убедитесь, что вы очистили кэш и отключите все кэширующие плагины при тестировании и отладке. Убедитесь, что все работает с темой по умолчанию WordPress и без плагинов, прежде чем добавлять что-то дополнительное. Перезапустили ли вы Nginx?

Вот видео, показывающее, как это у меня настроено: https://youtu.be/0hZfEivLfFU

Вот пример моей конфигурации Nginx:

##################################
# WORDPRESS NGINX CONFIGURATIONS
##################################

server {
listen 80;
root /var/www/html;
server_name example.com;
access_log /var/log/nginx/wp_client_access.log;
error_log /var/log/nginx/wp_client_error.log;

location / {
    index                               index.php index.html;
    try_files                           $uri $uri/ /index.php?$args;
}

# Specify a charset
        charset                         utf-8;
# GZIP
        gzip                            off;

# Add trailing slash to */wp-admin requests.
        rewrite /wp-admin$ $scheme://$host$uri/ permanent;

# Prevents hidden files (beginning with a period) from being served
location ~ /\. {
        access_log                      off;
        log_not_found                   off;
        deny                            all;
}

############
# Pass uploaded files to wp-includes/ms-files.php.
############

#       rewrite                         /files/$ /index.php last;

if ($uri !~ wp-content/plugins) {
        rewrite /files/(.+)$ /wp-includes/ms-files.php?file=$1 last;
}

# Rewrite multisite in a subdirectory '.../wp-.*' and '.../*.php'.
 if (!-e $request_filename) {
    rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
    rewrite ^/[_0-9a-zA-Z-]+.*(/wp-admin/.*\.php)$ $1 last;
    rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last;
}

# Rewrite multisite '.../wp-.*' and '.../*.php'.
#if (!-e $request_filename) {
#    rewrite /wp-admin$ $scheme://$host$uri/ permanent;
#    rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) /wp$1 last;
#    rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ /wp$1 last;
#}

###########
# SEND EXPIRES HEADERS AND TURN OFF 404 LOGGING
###########

        location ~* ^.+.(xml|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
        access_log                      off;
        log_not_found                   off;
        expires                         max;
}

# Pass all .php files onto a php-fpm or php-cgi server
location ~ \.php$ {
        try_files                       $uri =404;
        include                         /etc/nginx/fastcgi_params;
        fastcgi_read_timeout            3600s;
        fastcgi_buffer_size             128k;
        fastcgi_buffers                 4 128k;
        fastcgi_param                   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass                    unix:/run/php/php7.2-fpm.sock;
        #fastcgi_pass                   unix:/run/php/php7.0-fpm.sock;
        fastcgi_index                   index.php;
}

# ROBOTS

         location = /robots.txt {
               allow all;
               log_not_found off;
               access_log off;
        }

# RESTRICTIONS
location ~* /(?:uploads|files)/.*\.php$ {
 deny all;
}
}

Ответ или решение

Для устранения проблемы с редиректом страниц WordPress в мультисайте с поддиректориями на главную страницу, необходимо обратить внимание на несколько ключевых моментов и причин, которые могут вызвать подобное поведение.

Теория

В WordPress Multisite, структура с поддиректориями требует особого внимания к конфигурации сервера и настройкам .htaccess или конфигурационного файла Nginx. Нередко проблемы возникают из-за конфликтов с плагинами, неправильно настроенных файлов конфигурации или ошибок в настройках самого WordPress. Кроме того, некоторые плагины для управления URL, как, например, Custom Permalinks, могут быть причиной нежелательных редиректов.

Пример

В предоставленном вами случае, вы используете Nginx и плагин Custom Permalinks для изменения URL. Ваша конфигурация Nginx может быть причиной проблем, если она не учитывает особенности работы с мультисайтами WordPress. Рассмотрим пример Nginx-конфигурации:

if (!-e $request_filename) {
    rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
    rewrite ^/[_0-9a-zA-Z-]+.*(/wp-admin/.*\.php)$ $1 last;
    rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last;
}

Эти строки необходимы для правильного функционирования мультисайтовой установки, и их отсутствие может блокировать доступ к страницам.

Применение

  1. Конфигурация Nginx: Убедитесь, что в ваших настройках Nginx применены приведённые выше rewrite правила. Это важно для корректной обработки URL и пути к файлам при использовании поддиректорий.

  2. Проверка плагинов: Временно отключите плагин Custom Permalinks и проверьте, решит ли это проблему. Иногда плагины вмешиваются в стандартную работу WordPress, вызывая такие проблемы.

  3. Настройки Multisite: Проверьте, правильно ли настроен ваш wp-config.php для поддержки мультисайтов с поддиректориями. Если настройка выполнена неверно, это может вызывать неожиданные редиректы.

  4. Очистка кэша: Убедитесь, что кэширование не влияет на тесты. Отключите все плагины кэширования и очистите все возможные кэши, включая серверный кэш Nginx.

  5. Тестирование базовой установки: Попробуйте переключиться на стандартную тему WordPress и отключить все плагины для изоляции проблемы. Добавление дополнительных функций и плагинов должно происходить постепенно, после базовой проверки.

  6. Перезапуск Nginx: Любые изменения в конфигурации Nginx требуют перезапуска сервера для применения новых настроек.

Следуя этим рекомендациям, вы сможете сузить круг возможных причин проблемы и обеспечить стабильную работу вашего WordPress Multisite с поддиректориями.

Оцените материал
Добавить комментарий

Капча загружается...