Контроль параметров GET запроса

1 23
Solmyr
На сайте с 10.09.2007
Offline
501
#21

Я делаю так:

1. GET-запрос разбирается обычным образом и определяется, какая страница должна быть отображена.

2. Перед вызовом страницы, страница "знает" какой у нее должен быть URI и фактический REQUEST_URI сверяется с тем, что "должно быть".

3. Если не совпадает - то 301 редирект на то что "должно быть".

богоносец
На сайте с 30.01.2007
Offline
774
#22
_vb_:
А rel="canonical" разве не для таких ситуаций?

А во сколько раз это замедлит индексацию? (не rel="canonical" замедлит, а неизбежность лишних обращений ПС к сцайту)

DiAksID:
те которые бот увидит - сгенерированные роутером системы, если система сама не плодит бредовые урлы (как джумла "без напильника" в руках нуба) - всё будет более чем нормально. разговоры о "злобных конкурентах" параноидальный бред ;)

А поскольку параноики не лечатся (как и рас3.14здяи программеры), и показать ПС можно самые разные урлы... предложите ТС легкое и быстро работающее решение. Можно на примере этого форума.

ukrdev
На сайте с 15.11.2011
Offline
31
#23

Что-то я не совсем понял что ТС нужно. Отследить дублирование параметров в строке или контролировать лишние параметры?

doctorpc
На сайте с 12.07.2009
Offline
112
#24
богоносец:
А во сколько раз это замедлит индексацию? (не rel="canonical" замедлит, а неизбежность лишних обращений ПС к сцайту)

+1 к rel="canonical".

Не вижу ни одной причины, почему это должно замедлить. Обращение в любом случае будет, если ссылка существует. Дальше робот узнает где искать оригинал страницы будь это 301 редирект или rel="canonical" - не важно.

А если отдавать 404, то не факт, что много 404 на сайте лучше чем много редиректов.

Если же тупо решать в лоб поставленную задачу, то врядли что-то другое можно придумать кроме

Solmyr:
Я делаю так:
2. Перед вызовом страницы, страница "знает" какой у нее должен быть URI и фактический REQUEST_URI сверяется с тем, что "должно быть".

P.S. на данном форуме никак эта проблема не решается.

S
На сайте с 20.08.2013
Offline
29
#25

Все параметры передаются в числовом виде, поэтому для исключения инъекций думаю достаточно будет привести их к соответствующему виду.

$_GET["id"]=intval($_GET["id"]);

а на счет отсечения лишних параметров в запросе - понравился вариант

Solmyr:
Я делаю так:
1. GET-запрос разбирается обычным образом и определяется, какая страница должна быть отображена.
2. Перед вызовом страницы, страница "знает" какой у нее должен быть URI и фактический REQUEST_URI сверяется с тем, что "должно быть".
3. Если не совпадает - то 301 редирект на то что "должно быть".

Попробую реализовать.

богоносец
На сайте с 30.01.2007
Offline
774
#26
Swif:
$_GET["id"]=intval($_GET["id"]);

А что будет при

/ru/forum/812957

/ru/forum/812957

?

Фактически надо проверять строку:

/showthread.php?t=812957

/showthread.php?t=812957&page=2

/showthread.php?t=812957&page=3

Но как это делать быстро при очень большом количестве страниц?

S
На сайте с 20.08.2013
Offline
29
#27

Ну вроде как то же самое перед выводом страницы -

$_GET["id"]=intval($_GET["id"]);

$_GET["t"]=intval($_GET["t"]);

$_GET["page"]=intval($_GET["page"]);

а изменить порядок параметров и отсечь лишнее в запросе -

2. Перед вызовом страницы, страница "знает" какой у нее должен быть URI и фактический REQUEST_URI сверяется с тем, что "должно быть".
S
На сайте с 20.08.2013
Offline
29
#28

Остановился на таком варианте.

<?php

$url='http://сайт.ru/';

if (substr_count($_SERVER['REQUEST_URI'], "category") >1){

$url=$url.'?category='.intval($_GET["category"]);

if (substr_count($_SERVER['REQUEST_URI'], "id") >1){

$url=$url.'&id='.intval($_GET["category"]);

...продолжить если есть еще параметры...

}

}

?>

//ну а исходя из этого уже составить

<link rel="canonical" href="<?php print $url?>"/>

получится какой бы ни был запрос, он для поисковика всегда будет правильный.

D
На сайте с 14.01.2007
Offline
153
#29

только вместо:

if (substr_count($_SERVER['REQUEST_URI'], "category") >1){

надо:

if (isset($_GET["category"])){

вместо:

$url=$url.'?category='.intval($_GET["category"]);

надо:

$url.='?category='.intval($_GET["category"]);

S
На сайте с 20.08.2013
Offline
29
#30

Ну да, что то я обходными путями накодил. Верное замечание.

1 23

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