Правильная реакция на несуществующие параметры в url

mhz
На сайте с 16.05.2007
Offline
190
mhz
1197

Хай!

Да, я понимаю, такие темы уже были. Но даже используя гугл я не смог найти единственно верное решение для себя.

Подскажите, пожалуйста, какая реакция сайта на несуществующие параметры (/?id=fffuu) наиболее правильная и как её грамотно реализовать?

Видел варианты простые, вроде этого (дяя "статичных" урлов):

RewriteCond %{THE_REQUEST} ^.*\?.*$
RewriteRule ^(.*)$ /404.html [L]

Читал про сложные варианты обработки несуществующих параметров. Это уже и для динамики подходит, да и вообще более труъ, но сложно как-то. =\

Натыкался на хороший компактный код Дубра, но тоже мало что понял. Особенно про массив хороших параметров.

И, наконец, видел совет отбрасывать все параметры и редиректить (301) на чистый url. Этот вариант кажется мне наиболее правильным, т. к. нефиг пользователю из-за всякой фигни 404 показывать, и ПС такое уже не схавают. Но это, опять же, подходит только для псевдо-статики.

Задача всего этого широка и проста: не плодить дубли, защитить сайт от недругов, правильно обрабатывать сессии и адекватно реагировать на партнёрские ссылки. Но в первую очередь, дубли.

В общем, растолкуйте, плз! Объясните нубу, какие варианты лучше и чем. Накидайте кодов каких-нибудь, если есть или пошлите по ссылкам. Хочется раз и навсегда определиться с этим вопросом. Может быть, если много инфы соберётся - целый faq получится.

И растолковывайте как для дебила, пожалуйста - хреновый из меня вебмастер, а программист - так вообще никакой. Спасибо!

Миниатюрный бультерьер Сахарок (http://www.bule4ka.ru/) — СДЛ о собачках. Вечные ссылки — безопасный способ продвижения и заработка. (http://miralinks.ru/users/registration/from:163)
Oniks
На сайте с 22.08.2005
Offline
176
#1
mhz:
Натыкался на хороший компактный код Дубра, но тоже мало что понял. Особенно про массив хороших параметров.

Сорри за прямоту, но если вы такой простой код не понимаете, может и не стоит в РНР лезть?!

$goodparams = array_flip(array('page', 'article')); //array_flip применяется, чтобы не юзать более громоздкую функцию array_search(), а обращаться напрямую к элементам массива. Сюда загоняются все те переменные, которые могут быть переданы текущему скрипту.

foreach ($_GET as $param => $value) { //рассматриваем каждую поступившую переменную
if (!isset($goodparams[$param])) { //если переменная не обнаружена в массиве хороших переменных, то...
header("HTTP/1.0 404 Not Found");
header("Location: /page.htm"); //либо редиректите, если 404 не нравится
break; //обрывание цикла (при редиректе необязательно)
}
}
Профессиональные услуги фотографа в Москве и области (http://www.oniks-photo.ru/) покупаю стать и ссылки с сайтов про охоту
mhz
На сайте с 16.05.2007
Offline
190
mhz
#2

Oniks, ну вопрос же как-то надо решать. :)

Да и хотелось бы узнать не только сами методы реализации, но и их плюсы/минусы.

За расшифровки спасибо, стало понятней! :) Про array_flip я действительно не мог сообразить.

Oniks
На сайте с 22.08.2005
Offline
176
#3

Еще один вариант - написать небольшой класс, типа такого


class params {
public $params=array();

function get($name){
if($_GET[$name]){
$this->params[]=$name;
return $_GET[$name];
} else return false;
}

function check(){
// здесь код Коли Дубра, хорошие переменные содержатся в массиве $this->params
}
}

// переменные получать в скриптах так
$param=$class->get('nameparam');
// в конце каждого скрипта запускать функцию
$class->check();

Минусы - надо включать буферизацию вывода РНР функцией obstart(), ну и нагрузка от "плохих" запросов останется.

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