@realmen80

Как в nginx php-fpm настроить редирект с УРЛ с окончанием на УРЛ без окончания?

Сайт работает на Nginx+PHP-FPM.

Нужно настроить редирект со всех страниц товаров с окончанием - ?selected_section=discussion, вот таких - https://site.ru/ru/tort-super-les.html?selected_se... на УРЛ товара БЕЗ этого окончания, то есть такой - https://site.ru/ru/tort-super-les.html.

В настройке сервера не разбираюсь... Не знаю влияет ли это как-то на настройку редиректа, но укажу на всякий случай - для каждого товара в УРЛ подставляется язык /ru/, /en/, /es/

Вот так:
site.ru/ru/tort-les.html?selected_section=discussion - нужен редирект на - https://site.ru/ru/tort-les.html
site.ru/en/tortik-forest.html?selected_section=discussion - нужен редирект на - https://site.ru/en/tortik-forest.html
site.ru/es/pastel-bosque.html?selected_section=discussion - нужен редирект на - https://site.ru/es/pastel-bosque.html

У меня сейчас вот такой nginx config:
server {
     listen  80;
     listen  443 ssl;

    server_name *.site.ru;
    return 301 https://site.ru$request_uri;
    rewrite ^(.*)$ https://site.ru permanent;

    ############################################################################

       ssl                         on;
       ssl_certificate             /etc/letsencrypt/live/site.ru/fullchain.pem;
       ssl_certificate_key         /etc/letsencrypt/live/site.ru/privkey.pem;
       include                     xtra/ssl.conf;

    ############################################################################
}

server {
    listen  80;
    listen  443 ssl;
    
    server_name site.ru;
    server_name www.site.ru;
    rewrite ^/(.*)/$ /$1 permanent;
   
    ############################################################################

    charset utf-8;

    ############################################################################

    access_log  /var/log/nginx/site.ru/access.log extended;
    error_log   /var/log/nginx/site.ru/error.log;

    ############################################################################

    include xtra/error-40X.conf;
    include xtra/error-50X.conf;

    ############################################################################

	ssl                         on;
	ssl_certificate             /etc/letsencrypt/live/site.ru/fullchain.pem;
	ssl_certificate_key         /etc/letsencrypt/live/site.ru/privkey.pem;
	include                     xtra/ssl.conf;

    ############################################################################

    set $root "/var/www/html/prod";
    root $root;
   
    include sites-available/locations.conf; 
}
################################################################################


Вот такой default.conf:
server {
  listen      80 default_server;
  server_name  _; 

  charset utf-8;

  include xtra/error-40X.conf;
  include xtra/error-50X.conf;

  location / {
	return 404;
  }

  location /pma/ {
        alias /usr/share/phpmyadmin/;
        index index.php;

  	location ~ \.php$ {
 		fastcgi_pass www;
        	fastcgi_index index.php;
        	fastcgi_read_timeout 3600;
		include xtra/fastcgi_params.conf;
   		fastcgi_param SCRIPT_FILENAME  $request_filename;
  	}
  
  	location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    		access_log    off;
    		log_not_found    off;
    		expires 1M;
  	}	
  }
   
 location /pma/setup/ {
	return 404;
 }
 location /pma/libraries/ {
	return 404;
 }

 location /postfixadmin/ {
        alias /var/www/html/postfixadmin/;
        index index.php;

        location ~ \.php$ {
                fastcgi_pass www;
                fastcgi_index index.php;
                fastcgi_read_timeout 3600;
                include xtra/fastcgi_params.conf;
                fastcgi_param SCRIPT_FILENAME  $request_filename;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                access_log    off;
                log_not_found    off;
                expires 1M;
        }
 }
}
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
@dodo512
server_name site.ru;
server_name www.site.ru;
rewrite ^/(.*)/$ /$1 permanent;

Тут добавить
if ($request_uri ~ "\.html\?selected_section=discussion") {
    return 301 $uri;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Вот так сделайте:
location / {
  if ($args = "selected_section=discussion") {
    return 301 $scheme://$host$uri;
  }
  return 404;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы