Доступ к странице сайта по id

Давно работаю с modx, но только сегодня узнал, что достучаться до любой страницы сайта при включенных ЧПУ можно дописав в адресной строке после имени домена ?id=Идентификатор_ресурса. Например, site.ru/?id=5375.
Рад если кому-то пригодится!
Дмитрий Куликов
09 июня 2016, 08:30
modx.pro
3
4 805
-2

Комментарии: 7

Максим Кузнецов
09 июня 2016, 12:44
1
+3
Сколько не вчитывался, так и не понял, что из этого «готовое решение». Ну, допустим.

Раз вы не знали о существовании такой особенности в 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'));
			}

		}
	
	}
    Владимир
    09 июня 2016, 12:52
    +3
    Не знаю с какой версии, но в 2.5.0 точно отключение "?id=" из коробки предусмотрено системным параметром request_method_strict — Да
    sunman
    31 октября 2016, 12:52
    0
    а куда этот плагин прописывать? нужно средиректить старые урлы с id на новые с чпу, спасибо.
Владимир
09 июня 2016, 12:49
1
+4
что достучаться до любой страницы сайта при включенных ЧПУ можно дописав в адресной строке после имени домена ?id
, а если включать системную настройку
request_method_strict — Да, то этой «радости» «достучаться… по ID» не будет, и возможный дублей тоже не будет.
И плагин не нужен, это в все из коробки предусмотрено.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
7