https://example.com
на самом деле не существует, корневой URI - /
- способ его отображения в адресной строке браузера зависит от браузера - некоторые автоматически отображают одиночный /
, тогда как другие удаляют одиночный /
.
Таким образом, вы не можете перенаправить с https://example.com/
на https://example.com
- он будет молча интерпретироваться как перенаправление с https://example.com/
на https://example.com/
.
Nginx использует нормализованный URI при оценке операторов location
и rewrite
и генерации переменной $uri
. Несколько последовательных вхождений /
складываются в один /
.
Хотя регулярное выражение ^/(.*)/$
соответствует URI //
, оператор никогда его не увидит. Потому что Nginx уже нормализовал этот URI до /
, что не соответствует регулярному выражению.
Если возникает проблема с корневым URI с несколькими /
s, примените регулярное выражение к переменной $request_uri
, которая содержит исходный URI перед нормализацией, а также строку запроса (если есть).
Например:
if ($request_uri ~ "^/{2,}(\?|$)") {
return 301 /$is_args$args;
}
Это может быть размещено внутри вашего блока location / {...}
. См. это предупреждение по использованию if
.