Как правильно отдать серверу 404 с любой GET переменной?

V6
На сайте с 18.11.2006
Offline
86
1697

В яндексе осталось куча страничек от старого сайта странички типа:

http://www.лалала.ru/?qwer

http://www.лалала.ru/?wer

http://www.лалала.ru/?asd

и т.д. теперь у сайта папочная структура и встал вопрос как убить все старые странички, по скольку сейчас по старым адресам ответ 200, а нужен 404.

Пробывал вот так:


if (isset($_GET['asd'])) {

err404(TRUE);
}

else {

}

Но таким способом убивается только одна переменная, а перебирать их всех это гиганская работа.

Кто может подсказать как убить все GET запросы по средствам php(я в нем не силен)? Что бы при любой переменной сервер отдавал бы ответ 404 а не 200

Нужно именно средствами php т.к. в дальнейшем будет форум и т.д. и через .htaccess запретить все со знаками вопроса нельзя.

Заранее благодарен :)

BlueRay
На сайте с 09.03.2011
Offline
38
#1

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


$cururl=$_SERVER['REQUEST_URI'];
if (strstr($cururl, '?')) {
header("Cache-Control: no-cache, no-store");
header($_SERVER['SERVER_PROTOCOL']." 404 Not Found"); }

Если в url будет знак '?', то будет 404 ответ.

upd:

Нужно именно средствами php т.к. в дальнейшем будет форум и т.д. и через .htaccess запретить все со знаками вопроса нельзя.

Это в шаблон сайта вставить и всё гуд. Если у вас к примеру wordpress, то в header.php кинуть, хотя по сути неважно в какую именно часть шаблона это будет вставлено.

Пишу десктопные и web приложения на C# (ASP.NET MVC) :-) Хотите сказать спасибо или обозвать дураком? Для этого есть репутация, не надо флудить.
Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#2

http://www.лалала.ru/?qwer

http://www.лалала.ru/?wer

http://www.лалала.ru/?asd

То что выделено жирным, это значение переменной, а как называется сам параметр?

Вообще ссылки такого вида у Вас из-за модРеврайта в .htaccess

Без всего такого, ссылка должна быть вида http://www.лалала.ru/index.php?bukvi=asd

Узнайте что у Вас вместо bukvi, и подставьте вместо asd суда вот:

if (isset($_GET['asd'])) {

Подпись))
siv1987
На сайте с 02.04.2009
Offline
427
#3

через htaccess

RewriteEngine On

RewriteCond %{QUERY_STRING} !^$

RewriteRule ^$ - [G,L]

skAmZ
На сайте с 04.09.2009
Offline
122
#4
Милованов Ю.С:
Вообще ссылки такого вида у Вас из-за модРеврайта в .htaccess

Вы ошибаетесь.

Милованов Ю.С:
То что выделено жирным, это значение переменной, а как называется сам параметр?

$_SERVER['QUERY_STRING']

-------------------------------------

vasa666:
Кто может подсказать как убить все GET запросы по средствам php(я в нем не силен)? Что бы при любой переменной сервер отдавал бы ответ 404 а не 200

if(!empty($_SERVER['QUERY_STRING'])){
// 404
}else{
//200
}
V6
На сайте с 18.11.2006
Offline
86
#5
BlueRay:
Если у вас действительно папочная структура, то можно выйти из этой ситуации так:

$cururl=$_SERVER['REQUEST_URI'];
if (strstr($cururl, '?')) {
header("Cache-Control: no-cache, no-store");
header($_SERVER['SERVER_PROTOCOL']." 404 Not Found"); }


Если в url будет знак '?', то будет 404 ответ.

upd:


Это в шаблон сайта вставить и всё гуд. Если у вас к примеру wordpress, то в header.php кинуть, хотя по сути неважно в какую именно часть шаблона это будет вставлено.

Спасибо) примерно так и хотел)) :) а для форума потом просто другой шаблон сделаю)

---------- Добавлено 24.04.2012 в 16:40 ----------

Милованов Ю.С:
http://www.лалала.ru/?qwer
http://www.лалала.ru/?wer
http://www.лалала.ru/?asd
То что выделено жирным, это значение переменной, а как называется сам параметр?
Вообще ссылки такого вида у Вас из-за модРеврайта в .htaccess
Без всего такого, ссылка должна быть вида http://www.лалала.ru/index.php?bukvi=asd
Узнайте что у Вас вместо bukvi, и подставьте вместо asd суда вот:
if (isset($_GET['asd'])) {

Дело в том что переменная "bukvi" из вашего примера, была удалена вместе со старой версией сайта и отловить её отдельно нету возможности. т.к. сайт вообще больше не пользуется такими переменными, а вот яндекс знает сайт с такими именно адресами, как я привел пример в первом сообщении. и суть проблемы была именно отловить по URL все значения переменных и отсечь их.

---------- Добавлено 24.04.2012 в 16:42 ----------

Большое вам спасибо за помощь!! skAmZ, siv1987, Милованов Ю.С, BlueRay

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