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


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

Comments (7)

  1. Максим Кузнецов 09 june 2016, 12:44 # +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'));
    			}
    
    		}
    	
    	}
    1. Владимир 09 june 2016, 12:52 # +3
      Не знаю с какой версии, но в 2.5.0 точно отключение "?id=" из коробки предусмотрено системным параметром request_method_strict — Да
      1. Максим Кузнецов 09 june 2016, 12:54 # +1
        Спасибо. Не знал.)
      2. sunman 31 october 2016, 12:52 # 0
        а куда этот плагин прописывать? нужно средиректить старые урлы с id на новые с чпу, спасибо.
        1. Владимир 31 october 2016, 16:56 # 0
          вы вот это прочтите modx.pro/development/8984-access-to-the-site-page-id/#comment-62012, если у вас новая версия, то плагин не нужен

          request_method_strict — Да
      3. Владимир 09 june 2016, 12:49 # +4
        что достучаться до любой страницы сайта при включенных ЧПУ можно дописав в адресной строке после имени домена ?id
        , а если включать системную настройку
        request_method_strict — Да, то этой «радости» «достучаться… по ID» не будет, и возможный дублей тоже не будет.
        И плагин не нужен, это в все из коробки предусмотрено.
        1. Дмитрий Куликов 10 june 2016, 11:45 # 0
          спасибо, будем знать!
        You need to login to create comments.