Я пытаюсь создать перенаправление, чтобы добавить косую черту в конце,
location / {
if($request_uri ~ ^([^.]*[^/])$){
return 301 https://$host$request_uri/;
}
}
Я понятия не имею, как выполнить сопоставление, если, когда я просто создаю перенаправление с помощью / - он работает, просто это регулярное выражение кажется сломанным.
Переписать пробовал
location / {
rewrite ^([^.]*[^/])$ $1/ permanent;
.....
}
и
if ($http_x_forwarded_proto != "https") {
return 301 https://$host$request_uri;
}
работает нормально, перенаправляет на https, я также хотел создать с ним регулярное выражение
Давно решил, но я вижу, что многие люди проверяют этот вопрос, поэтому, если я правильно помню, у меня не было этой строки кода, и она перенаправляла меня:
port_in_redirect off;
Я знаю, я не упоминал рассматриваемые порты, на него невозможно ответить, но я просто оставлю его здесь, если у кого-то была такая же проблема
Если я правильно понял вопрос, вы хотите автоматически обслуживать без использования перенаправления 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, если ни один из предыдущих шаблонов не соответствует.Кажется, это работает так, как ожидалось:
location / {
if ($request_uri ~ ^([^.]*[^/])$) {
return 301 https://$host$request_uri/;
}
try_files $uri $uri/ /index.html;
....
}
Не уверен, что увидите разницу с той, которую вы пробовали, за исключением синтаксической ошибки, с которой вы должны были столкнуться из-за отсутствия пробелов в if
заявление (может быть опечаткой). ... или, возможно, из-за того, что у вас есть другие директивы, которые вы не показываете нам, которые отменяют эту.