Невозможно удалить 301 редирект для WordPress WP-администратора на Nginx

Невозможно удалить редирект 301 для WordPress wp-admin на nginx. Домашняя страница кажется хорошей

Я перепробовал почти все

  • Отключение плагинов путем переименования каталога плагинов
  • Удаление redirect_canoncial в functions.php
  • Даже восстановленный снимок ebs сделан до изменения

Выход для curl –I http://www.example.com/wp-admin 301 перемещен навсегда. Я использую облачный фронт и файл моего сервера по умолчанию ниже

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

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.php index.html index.htm index.nginx-debian.html;

    server_name www.example.com;

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            #try_files $uri $uri/ =404;
            try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
            include snippets/fastcgi-php.conf;

    #       # With php7.0-cgi alone:
    #       fastcgi_pass 127.0.0.1:9000;
    #       # With php7.0-fpm:
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
            deny all;
    }
}

3 ответа

Это перенаправление на TLS, т.е. Location: https://www.example.com/wp-admin, Это делается не в конфигурации сервера, а в function auth_redirect(), нашел в wp-includes/pluggable.php строки 997-1064, более конкретно, строки 1012-1020:

// If https is required and request is http, redirect
if ( $secure && !is_ssl() && false !== strpos($_SERVER['REQUEST_URI'], 'wp-admin') ) {
    if ( 0 === strpos( $_SERVER['REQUEST_URI'], 'http' ) ) {
        wp_redirect( set_url_scheme( $_SERVER['REQUEST_URI'], 'https' ) );
        exit();
    } else {
        wp_redirect( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
        exit();
    }
}

Это контролируется force_ssl_admin(), включенный путем добавления define('FORCE_SSL_ADMIN', true); постоянный wp-config.php, Если константа не определена, по умолчанию false если только siteurl имеет https:// (увидеть wp_ssl_constants() в wp-includes/default-constants.php линии 284-304).

Номера строк исходного кода взяты из текущего WordPress 4.9.8 и могут отличаться в будущих версиях.

Перенаправления страниц администратора и входа в TLS не являются вредными, и вы должны включить их для безопасности. В настоящее время рекомендуется использовать все сайты, защищенные TLS, т.е. https://www.example.com/ как siteurl.

После долгих чтений похоже, что проблема заключается в конфликте между корнем nginx по умолчанию, который я обнаружил, / usr / share / nginx, и тем, который был изменен в соответствии с корневой директивой site-available/default, который читает / var / www / html.

Nginx искал файл /usr/share/nginx/html/wp-admin/index.html, который не существует. Я создал папку wp-admin с index.html в / usr / share / nginx, которая остановила перенаправление 301. С тех пор я удалил оба, и 301 не вернулся, но затем привел к ошибке 404, которую я исправил, вернувшись к исходному сайту, доступному / по умолчанию, который шел с установкой nginx. Как только я перезагрузил nginx, все было хорошо.

Вы можете выдать себя за другое лицо, указав страницу, которая становится 404 в proxy_pass.

      location = /wp-admin {
    proxy_pass https://example.com/a;
}
Другие вопросы по тегам