Невозможно удалить 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;
}