无法在 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.php
false
siteurl
https://
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;
}