Доступ к странице сайта по id
Давно работаю с modx, но только сегодня узнал, что достучаться до любой страницы сайта при включенных ЧПУ можно дописав в адресной строке после имени домена ?id=Идентификатор_ресурса. Например, site.ru/?id=5375.
Рад если кому-то пригодится!
Рад если кому-то пригодится!
Комментарии: 7
Сколько не вчитывался, так и не понял, что из этого «готовое решение». Ну, допустим.
Раз вы не знали о существовании такой особенности в MODX'e, то, подозреваю, не знали и о том, что такие ссылки в СЕО являются дублями страниц и от них нужно бы избавляться. Примерно таким плагином:
Раз вы не знали о существовании такой особенности в MODX'e, то, подозреваю, не знали и о том, что такие ссылки в СЕО являются дублями страниц и от них нужно бы избавляться. Примерно таким плагином:
<?php
if ($modx->event->name != "OnHandleRequest" || $modx->context->key == 'mgr') {
return;
}
//Если не главная страница вида '/'
if (strtok($_SERVER['REQUEST_URI'], '?') != '/') {
//Разбиваем ури на основную ссылку и гет-параметры
$request_uri = explode("?", $_SERVER['REQUEST_URI']);
$uri = $request_uri[0];
//Очищаем от слеша в начале uri
$uri = substr($uri, 1);
//Если запрос идет к index.php, то заменяем страницы вида /index.php?id= на чпу-шные
if ($uri == 'index.php') {
$id = intval($_GET['id']);
//Если ресурс с таким id существует - редиректим
if ($modx->getCount('modResource', array('id' => $id))) {
$modx->sendRedirect($modx->makeUrl($id), array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
}
else {
//Если url не чпу, то обработка OnPageNotFound не срабатывает и необходимо дублировать определение страницы 404
$error_id = intval($modx->getOption('error_page'));
//Если 404 страница объявлена в системных настройках и существует, то редиректим
if ($error_id > 0 && $modx->getCount('modResource', array('id' => $error_id))) {
$redirect_page = $modx->makeUrl($error_id);
}
//Иначе перебрасываем на главную страницу
else {
$start_id = intval($modx->getOption('site_start'));
$redirect_page =$modx->makeUrl($start_id);
}
$modx->sendRedirect($redirect_page, array('responseCode' => 'HTTP/1.1 404 Not Found'));
}
}
}
Не знаю с какой версии, но в 2.5.0 точно отключение "?id=" из коробки предусмотрено системным параметром request_method_strict — Да
Спасибо. Не знал.)
а куда этот плагин прописывать? нужно средиректить старые урлы с id на новые с чпу, спасибо.
вы вот это прочтите modx.pro/development/8984-access-to-the-site-page-id/#comment-62012, если у вас новая версия, то плагин не нужен
request_method_strict — Да
request_method_strict — Да
что достучаться до любой страницы сайта при включенных ЧПУ можно дописав в адресной строке после имени домена ?id, а если включать системную настройку
request_method_strict — Да, то этой «радости» «достучаться… по ID» не будет, и возможный дублей тоже не будет.
И плагин не нужен, это в все из коробки предусмотрено.
спасибо, будем знать!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.