无法删除 nginx 上 wordpress wp-admin 的 301 重定向

无法删除 nginx 上 wordpress wp-admin 的 301 重定向

无法在 nginx 上删除 wordpress wp-admin 的 301 重定向。主页似乎没问题

我几乎尝试了所有方法

  • 通过重命名插件目录来禁用插件
  • 删除 functions.php 中的 redirect_canoncial
  • 甚至恢复了变更前拍摄的 ebs 快照

curl –I 的输出http://www.example.com/wp-admin301 已永久移动。我使用的是 cloudfront,我的服务器默认文件如下

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;
    }
}

答案1

这是到 TLS 即的重定向Location: https://www.example.com/wp-admin。它不是在服务器配置中完成的,而是在中完成的function auth_redirect(),可以在第 997-1064 行中找到wp-includes/pluggable.php,更具体地说是在第 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()添加到 来启用。如果未定义常数,则默认为 ,除非有(参见第284-304 行)。define('FORCE_SSL_ADMIN', true);wp-config.phpfalsesiteurlhttps://wp_ssl_constants()wp-includes/default-constants.php

源代码行号来自当前的 WordPress 4.9.8,并且可能会因未来版本而有所不同。

管理员和登录页面重定向到 TLS 不会造成危害,并且您应该启用它们以确保安全。当前的最佳做法是让所有站点都受到 TLS 保护,即https://www.example.com/作为 siteurl。

答案2

经过大量阅读之后,问题似乎归结于我发现的默认 nginx 根目录(/usr/share/nginx)与在 site-available/default 根指令下修改的根目录(读取/var/www/html)之间的冲突。

Nginx 正在寻找不存在的文件 /usr/share/nginx/html/wp-admin/index.html。我在 /usr/share/nginx 中创建了一个带有 index.html 的 wp-admin 文件夹,这阻止了 301 重定向。此后我删除了这两个文件,301 未返回,但随后导致 404 错误,我通过返回 nginx 安装附带的原始 site-available/default 来修复该错误。一旦我重新加载 nginx,一切就都好了。

答案3

您可以通过在 proxy_pass 中指定变为 404 的页面来进行模拟。

location = /wp-admin {
    proxy_pass https://example.com/a;
}

相关内容