@ekopach

Как убрать редирект с /blog на /blog/ (слеш на конце) в wordpress за nginx?

Имеется сайт, на котором все запросы на /blog проксируются nginx`ом на php-fpm.
В отдельной директории распакован wordpress. Конфиг nginx (секция, обрабатывающая запросы на /blog):
location @wp {
	rewrite ^/blog(.*) /blog/index.php?q=$1;
}
	
location /blog {           
	alias /var/www/blog;
	index index.php;
	
	try_files $uri $uri/ @wp;
		
	location ~* /(?:uploads|files)/.*\.php$ {
		deny all;
	}
		
	location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
		access_log    off;
		log_not_found    off;
		expires 1M;
	}
	
	location ~ \.php$ {
                if_modified_since off;
           
		fastcgi_pass php-fpm;
		fastcgi_index index.php;
		include fastcgi_params;
		fastcgi_param SCRIPT_FILENAME $request_filename;
		fastcgi_ignore_client_abort off;
                fastcgi_pass_header Last-Modified;
	}
}

Проблема в том, что на запрос к site.ru/blog nginx возвращает 301 редирект на site.ru/blog/ cо слешем на конце.
Запрос точно обрабатывает nginx и добавляет редирект, до wordpress запрос не доходит - это проверял.
Подскажите пожалуйста, что не так с конфигом? Как убрать редирект, чтобы страница открывалась и с слешем на конце и без него.
  • Вопрос задан
  • 472 просмотра
Решения вопроса 1
@ekopach Автор вопроса
Разобрался сам, может кому поможет:

1. В конфиге nginx меняем:
try_files $uri $uri/ @wp;
На:
try_files $uri @wp;
После этого будет работать как /blog, так и /blog/ - т.е. это убирает редирект на стороне nginx.

НО, оказывается есть еще редирект в Wordpress, точно такой же, который можно выключить вписав в functions.php:
remove_filter('template_redirect', 'redirect_canonical');

В этом случае будет полностью отключен функционал канонических редиректов.
Я использовал следующий код для отключения редиректа только для главной страницы блога:
add_filter('redirect_canonical', 'homepage_disable_redirect_canonical');
function homepage_disable_redirect_canonical($redirectUrl) {
	if(is_home()) {
        $redirectUrl = false;
    }

	return $redirectUrl;
}


Я правил конфиг nginx - не помогает, добавлял фильтры в function.php - не помогало, а нужно было изменения в комплексе внести.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
azerphoenix
@azerphoenix
Java Software Engineer
Здравствуйте!
Попробуйте вот, эти решения -
https://serverfault.com/questions/597302/removing-...
Google
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы