Доброго времени суток. Ситуация следующая.. Допустим есть адрес страницы - http://sait.ru/forum/viewforum.php?forum_id=5&page=2 Теперь переставляем get-переменные местами - http://sait.ru/forum/viewforum.php?page=2&forum_id=5 Получается, что переменные также передаются, но одна и та же страница доступна по двум разным адресам. Можно ли задать строгий порядок следования переменных в адресной строке? У меня пока только одна идея - проверять с помощью preg_match Код (Text): if(!empty($_GET['page'])) { if(!preg_match("#\/forum\/viewforum.php\?forum_id\=(.*)\&page\=(.*)#i", $_SERVER['REQUEST_URI'])) { require_once ('error404.php'); } } Но если в адресной строке много переменных - http://sait.ru/forum/viewforum.php?forum_id=5&option=3&page=2, то кол-во проверок резко увеличивается Код (Text): if(!empty($_GET['page'])) { if(!preg_match("#\/forum\/viewforum.php\?forum_id\=(.*)\&page\=(.*)#i", $_SERVER['REQUEST_URI'])) { require_once ('error404.php'); } } if(!empty($_GET['option'])) { if(!preg_match("#\/forum\/viewforum.php\?forum_id\=(.*)\&option\=(.*)#i", $_SERVER['REQUEST_URI'])) { require_once ('error404.php'); } } if(!empty($_GET['page']) && !empty($_GET['option'])) { if(!preg_match("#\/forum\/viewforum.php\?forum_id\=(.*)\&option\=(.*)\&page\=(.*)#i", $_SERVER['REQUEST_URI'])) { require_once ('error404.php'); } } Добавил всего-то одну новую переменную а кода стало больше в три раза. Как ещё можно решить эту задачу, чтобы покороче было?
1) Придумать проблему; 2) Ломать голову над решением; Не надо так делать. Проблемы нет. Поисковики не будут тасовать параметры, получая тонны ссылок. Никто не будет их руками переставлять специально, чтобы вам подгадить. А их положение в строке при генерации ссылки определяете только вы.
страница не становится доступна по двум разным адресам. порядок аргументов не влияет на логический адрес. только значения аргументов.
Благодарю, понял). Ну как всегда пытаешься учесть все возможные варианты ошибок, вот и появляются "надуманные проблемы". А вот это мне очень понятно, разве поисковый робот не посчитает эти ссылки разными?
предвкушаю любителей меня поправить - я говорю о парах ключ-значение а не о том что значение может быть массивом. тогда естественно сборка массива будет идти слева-направо. и не говорю о случаях множественного вхождения ключа - будет использовано последнее значение.
ну вот реальный пример правильная ссылка - http://rusfusion.ru/forum/viewforum.php?forum_id=7&rowstart=20 неправильная - http://rusfusion.ru/forum/viewforum.php?rowstart=20&forum_id=7 ведь поисковик эти ссылки будет считать разными, а страница одна и та же открывается
поисковик не будет считать их разными. при перестановке мест слагаемых сумма не меняется - это еще в школе учат. в данном случае идентичные значения ключей считаются равными и их позиция за исключением описанных мною случаев не влияет на итоговое значение. ну грубо говоря чтоб ты совсем успокоился - поисковик аргументы прочитает слева направо а потом отсортирует по ключу. и как ты не поставь - выходное значение будет всегда одно общее. поисковики не дураки придумали отнюдь.
Даже если бы это имело значение, вероятность самого появления проблемы меньше 0.00000000000000000000000000000000000001.
На самом деле, никаких проблем с контролем следования переменных в массиве $_GET нет. Хотите так сделать, бегите циклом по гету и сверяйте в той ли последовательности идут параметры в которой вам нужно и редиректите, если что не так, а не 404рите. Хотя как уже сказали, разницы нет. Чисто ради порядка. Зачем регулярки-то мучать? Есть более правильное решение: ЧПУ Я лично геты только для поиска использую.
Внимание, вопросы к автору цитаты: 1) А для чего, собственно, по-вашему, нужен GET как таковой? 2) И для чего нужен POST? 3) По-вашему, POST лучше, чем GET? 4) Зачем тогда они оба до сих пор в спецификации?
потому что назначение у них разное))))))))) равно как и у HEAD и OPTION и так далее. такие вот у нас веб-программисты пошли. основного стандарта веба - протокола передачи гипертекста - не знают.
Не знаешь что, но уже советуешь. Это не альтернатива GET ни разу. У них, как было сказано выше, принципиальное назначение разное. Ищи, читай, вникай. Добавлено спустя 2 минуты 51 секунду: Вот еще пища для ума: GET и POST не просто названия с потолка. Они осмысленные. И, вдовесок, POST - не является более продвинутой версией GET, и не появился значительно позже. Они - часть стандарта, были введены сразу вместе. Как думаешь, стали бы просто так вводить два идентичных метода, когда достаточно одного, да еще и именовать их так странно?
Благодарю всех за ответы, выводы для себя сделал. На счёт вопроса почему GETом данные передаю.. потому что не знаю как сделать постраничную навигацию используя POST, вернее один способ уже испробовал, каждый раз результат переданных параметров сохранял в сессию, но мне такой подход показался сложным и снова много лишних проверок, проще через GET
desertFox, для указания "единственно правильного адреса" используй canonical url. и еще, если у тебя есть форма с поиском или еще какой-то источник богатых адресов с параметрами, объяви выдачу этой формы неиндексируемой: через robots.txt или meta noindex. ибо нефиг индексировать всё подряд.
artoodetoo, благодарю за подсказку, это уже активно используется на страницах с чпу-адресами, я только не знал, как относятся поисковики к полностью динамическим адресам, у которых просто местами переставлены переменные, ну вроде с этим разобрался
тебе не всё ли равно? Добавлено спустя 2 минуты 39 секунд: ссылку можно другу кинуть, но большие данные кодировать в урл геморно и выглядит жутко. Поэтому большие данные и формы лучше отправлять постом, а если над осделать так чтобы ссылку кинуть можно было - то надо придумать с get'ом ченить.