Я пытаюсь создать перенаправление, чтобы добавить завершающий слеш,
location / {
if($request_uri ~ ^([^.]*[^/])$){
return 301 https://$host$request_uri/;
}
}
Я понятия не имею, как сделать сопоставление в if, когда я просто создаю перенаправление с помощью / - это работает, просто это регулярное выражение кажется сломанным.
ОБНОВЛЯТЬ
Переписать я попробовал
location / {
rewrite ^([^.]*[^/])$ $1/ permanent;
.....
}
и
if ($http_x_forwarded_proto != "https") {
return 301 https://$host$request_uri;
}
работает отлично, перенаправляет на https, я хотел создать регулярное выражение с ним
решение1
Проблема решена давно, но я вижу, что многие проверяют этот вопрос, так что, если я правильно помню, у меня не было этой строки кода, и она перенаправляла меня:
port_in_redirect off;
Я знаю, я не упомянул порты, о которых идет речь, на это невозможно ответить, но я просто оставлю это здесь, если у кого-то возникнет такая же проблема.
решение2
Если я правильно понял вопрос, вы хотите автоматически обслуживать, без использования 301-редирект,http://example.com/foo/index.htmlкогда запрос касаетсяhttp://example.com/fooбез завершающего слеша?
Если так, то я обнаружил, что эта конфигурация try_files работает:
try_files $uri $uri/index.html $uri/ =404;
- Первый
$uri
точно соответствует URI - Второй
$uri/index.html
соответствует каталогу, содержащему index.html, где последний элемент пути соответствует имени каталога, без завершающего слеша. - Третий
$uri/
соответствует каталогу - Четвертый
=404
возвращает страницу ошибки 404, если ни один из предыдущих шаблонов не соответствует.
решение3
Кажется, это работает так, как и ожидалось:
location / {
if ($request_uri ~ ^([^.]*[^/])$) {
return 301 https://$host$request_uri/;
}
try_files $uri $uri/ /index.html;
....
}
Не уверен, что вижу разницу с тем, который вы пробовали, за исключением синтаксической ошибки, с которой вы должны были столкнуться из-за пропущенных пробелов в операторе if
(это может быть опечатка). ...или, может быть, потому, что у вас есть другие директивы, которые вы нам не показываете и которые переопределяют эту.