nginx в url 2 слэша то редирект на 404.php

baas
На сайте с 17.09.2012
Offline
161
801

Здравствуйте.

Подскажите пожалуйста, как лучше редирект сделать.

Условие, если в url есть // ( два слэша) то редирект нужно сделать на страницу 404.php

Вот что сделал.

http {

merge_slashes on;

И дальше в вирутал хосте.

if ($request_uri ~ ^[^?]*//) {

return 404;
}

Но в данном случае редиректится как-то конско, не на фируменную страницу сайта.

Вот что выходит

Не удается получить доступ к сайту

Веб-страница по адресу https://test.site.local/decor/post//, возможно, временно недоступна или постоянно перемещена по новому адресу.
ERR_INVALID_RESPONSE
Настройка BSD систем. (https://www.fryaha.ru) Знание сила, незнание Рабочая сила!
J
На сайте с 20.02.2014
Offline
120
jkm
#1

Если нужно перенаправление на /404.php

if ($request_uri ~ ^[^?]*//) {

rewrite ^ /404.php;
}
baas
На сайте с 17.09.2012
Offline
161
#2
jkm:
Если нужно перенаправление на /404.php
if ($request_uri ~ ^[^?]*//) {

rewrite ^ /404.php;
}

не работает.

ссылка

https://test.loca.loca/category/book//

Лог.

2.5.3.6 - baas [19/Mar/2018:13:22:01 +0300] "GET /category/book// HTTP/1.1" 200 14666 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36"

NothingMatters
На сайте с 12.06.2017
Offline
45
#3
baas:
не работает.
ссылка
https://test.loca.loca/category/book//
Лог.
2.5.3.6 - baas [19/Mar/2018:13:22:01 +0300] "GET /category/book// HTTP/1.1" 200 14666 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36"

Потому-что так:

if ($request_uri ~ [^?]*//$) {

rewrite ^ /404.php;
}
J
На сайте с 20.02.2014
Offline
120
jkm
#4
baas:
не работает.
ссылка
https://test.loca.loca/category/book//
Лог.
2.5.3.6 - baas [19/Mar/2018:13:22:01 +0300] "GET /category/book// HTTP/1.1" 200 14666 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36"

Nginx только перенаправит запрос на выбранный скрипт и уже php скрипт должен вызывать header() и установливать HTTP-заголовок 404 Not Found.

---------- Добавлено 19.03.2018 в 16:08 ----------

NothingMatters:
Потому-что так:
if ($request_uri ~ [^?]*//$) {

rewrite ^ /404.php;
}

$request_uri содержит запрос вместе с GET параметрами http://nginx.org/ru/docs/http/ngx_http_core_module.html#var_request_uri

В таком виде шаблон не совпадёт с /category/book//?lol

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий