@saymeit

Почему в Nginx при 301 редиректе теряется часть URI?

Почему в Nginx при 301 редиректе теряется часть URI?

делаю примерно так:

location /grid {
   return 301 https://$server_name$request_uri;   
}


в адресной строке пишу domain.ru/foo/bar/ попадаю на https://domain.ru/bar
Перед nginx стоит еще apache, который проксирует на /foo в nginx.

Как это можно пофиксить?
  • Вопрос задан
  • 517 просмотров
Пригласить эксперта
Ответы на вопрос 2
@AlexListen
админ, стаж 14 лет
потому как лучше делать так:
rewrite ^/(.*)$ https://$server_name/$1 permanent;
Ответ написан
@xbox
Попробуйте так. У меня такой вариант работает.
Я его, например, использую для перенаправления всех запросов с домена domain.ru на домен www.domain.ru. При этом строка с адресом и параметрами после редиректа полностью сохраняется.
location / {		
			rewrite ^(.*)$ http://www.domain.ru$1 permanent;
		}

(http/https - подставьте нужное)

Для чистоты эксперимента используем "location /". Остальные локейшены можно на время совсем убрать.
Вместо переменной $server_name с именем домена используем явное указание домена.
В регулярном выражении слэш убираем из первой части и из второй. Слэш будет передаваться внутри параметра.

Если сработает, то после этого можете по очереди приводить к тому виду, как Вы хотите (изменяя location, передавая домен в виде параметра и тп). При этом смотрите, что приводит к отсутствию желаемого результата.

И еще обратите внимание. Если Вы в адресной строке пишите domain.ru/foo/bar/, то не факт, что этот запрос обработает "location /grid". Есть вероятность, что его обрабатывает другой location, который более точно совпадает с адресом. Проверить, какой локейшн отрабатывает можно, например, так
location /grid {
   return 503;   
}

Ставите для разных локейшнов разный код возврата без всяких дополнительных обработок. Набираете в браузере адрес, получаете код ошибки и понимаете, какой локейшн его отработал.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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