// отдавать 404 ответ сервера, как?

12
serjoo
На сайте с 12.09.2011
Offline
389
3772

Приветствую.

Могут быть такие урлы:

site.ru////

site.ru/razdel///

Как таким урлам отдавать 404 ответ сервера?

Мультур..
дани мапов
На сайте с 06.09.2012
Offline
204
#1

В .htaccess выше всех правил поставить:

RewriteCond %{REQUEST_URI} ^(.*)///$

RewriteRule . 404.php [L]

Содержимое 404.php


<?php
header( "HTTP/1.1 404 Not Found" );
echo "Sorry the page you are looking for was not found.";
?>
Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
serjoo
На сайте с 12.09.2011
Offline
389
#2

С таким:


RewriteCond %{REQUEST_URI} ^(.*)//$
RewriteRule . 404.php [L]

И таким:


header( "HTTP/1.1 404 Not Found" );
header('Status: 404 Not Found');

site.ru/razdel// - отдает статус 404

site.ru// - 200 ok

site.ru//razdel/ - 200 ok

Как победить?

В общем, нужно в урлах где будет содержаться подряд два слеша и больше - отдавать HTTP 404.

[umka]
На сайте с 25.05.2008
Offline
456
#3

Немного поправить:

RewriteCond %{REQUEST_URI} //

Хм... вот и ни фига :) Апач самодеятельность устраивает.

Тогда так точно работает:

RewriteCond %{THE_REQUEST} //

RewriteRule . [R=404,L]

Лог в помощь!
serjoo
На сайте с 12.09.2011
Offline
389
#4

Не помогает.

нужно в урлах где будет содержаться подряд два слеша и больше - отдавать HTTP 404.

Кстати, при этом чтобы страницы открывались как обычно, только статус им 404.

И да, есть такой код для ? в урлах:

if (strpos($_SERVER['REQUEST_URI'],'?' )) {

header('HTTP/1.1 404 Not Found');
header('Status: 404 Not Found');

может к нему можно дозапилить два слеша?

---------- Добавлено 21.05.2014 в 21:59 ----------

[umka:
;12870040]Тогда так точно работает:

RewriteCond %{THE_REQUEST} //
RewriteRule . [R=404,L]

для такого вида, да:

site.ru/razdel//

для остальных не работает.

[umka]
На сайте с 25.05.2008
Offline
456
#5

Если нужно, чтобы страницы при этом открывались как обычно, то тогда только последний вариант, который вы написали.

Допилить так

if (strpos($_SERVER['REQUEST_URI'],'?')!==false||strpos($_SERVER['REQUEST_URI'],'//')!==false) {

дани мапов
На сайте с 06.09.2012
Offline
204
#6
serjoo:

И да, есть такой код для ? в урлах:
if (strpos($_SERVER['REQUEST_URI'],'?' )) {

header('HTTP/1.1 404 Not Found');
header('Status: 404 Not Found');

if (strpos($_SERVER['REQUEST_URI'],'?' ) !== false or strpos($_SERVER['REQUEST_URI'],'//' ) !== false) {

header('HTTP/1.1 404 Not Found');

header('Status: 404 Not Found');

..............

serjoo
На сайте с 12.09.2011
Offline
389
#7

[umka], дани мапов, это то что нужно, спасибо.

siv1987
На сайте с 02.04.2009
Offline
427
#8
serjoo
На сайте с 12.09.2011
Offline
389
#9

siv1987, обошлись без редиректа.

siv1987
На сайте с 02.04.2009
Offline
427
#10

Добавьте флаг F, будет без редиректа, или R=404 для 404 ответа

12

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