Почему 404 страница не всегда выбивает?
        Здравствуйте. Подскажите, пожалуйста, почему 404 страница не всегда вызывается при неверном урл?
Пример:
Вбиваю какой нибудь ошибочный запрос /rtyutry
404 страница появляется
А вот если перейти через /?an=k9_6 то 404 страницы нет, а будет главная страница.
А вот вид таких урл ?an= это еще со старого сайта, потому в некоторых сервизах анализаторов куча ошибок.
Как исправить данный неприятный случай?
    
    
                                                                                
            Пример:
Вбиваю какой нибудь ошибочный запрос /rtyutry
404 страница появляется
А вот если перейти через /?an=k9_6 то 404 страницы нет, а будет главная страница.
А вот вид таких урл ?an= это еще со старого сайта, потому в некоторых сервизах анализаторов куча ошибок.
Как исправить данный неприятный случай?
Комментарии: 12
                Потому что ?an=k9_6 — не страница, а параметр.
В твоём примере загружается главная страница и видит, что в $_GET['an'] есть значение k9_6 и может что-то с этим сделать.
                    В твоём примере загружается главная страница и видит, что в $_GET['an'] есть значение k9_6 и может что-то с этим сделать.
                да я это понял, просто хотел, что бы 404 страница выбивала. Спасибо за разъяснения о GET параметрах.            
                    
                Или сделай 301 редирект с ненужных страниц куда нибудь, или закрой их в robots.txt по маске.            
                    
                да, она до сих пор индексируется и в сеоранге вообще каша происходит. Спасибо большое.            
                    
                Можно расписать плагин для такой ситуации:
                    <?php
	if ($modx->event->name != "OnHandleRequest" || $modx->context->key == 'mgr') {
		return;
	}
		
	if ($_SERVER['REQUEST_URI'] != '/') {
		$uri = strtok(substr($_SERVER['REQUEST_URI'], 1), '?');
		
		if ($uri == 'index.php') {
			//Заменяем страницы вида /index.php?id= на чпу-шные
			$id = intval($_GET['id']);
			
			if ($modx->getCount('modResource', array('id' => $id))) {
				$modx->sendRedirect($modx->makeUrl($id), array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
			}
			else {
				//Если url не чпу, то обработка OnPageNotFound не срабатывает и необходимо дублировать определение страницы переадресации
				$error_id = intval($modx->getOption('error_page'));
				
				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'));
			}
		}
	} — написал на скорую руку, если что — поправляйте %)            
                Спасибо большое.
Плагин надо вешать на событие OnHandleRequest?
                    Плагин надо вешать на событие OnHandleRequest?
                Да, ну только в моем примере решается аналогичная проблема с /index.php?id=число.
Для вашего случая вам нужно модифицировать входящий параметр (у меня id) и процесс сравнения под себя.
                    Для вашего случая вам нужно модифицировать входящий параметр (у меня id) и процесс сравнения под себя.
                в .htaccess
                    RewriteCond %{QUERY_STRING} ^(.*)an= [NC]
RewriteRule (.*) http://xxx/404.html? [R=301]            
                работает. спасибо большое.            
                    
                Я полагаю, это проблемы бы не было, если бы у меня был метатег каноникал (канонические урл).
Может кто даст ссылку или идею, как реализовать канонический метатег в области head?
                    Может кто даст ссылку или идею, как реализовать канонический метатег в области head?
                Для fenom: 
Тегами modx:
Или, например, вот так (не помню для чего, но как-то возникла проблема с предыдущим вариантом, которая решилась нижеописанным примером):
                    {set $canonical_url = $_modx->makeUrl($_modx->resource.id, '', '', 'full')}
<link rel="canonical" href="{$canonical_url}" />
<meta property="og:url" content="{$canonical_url}" /> Тегами modx:
<link rel="canonical" href="[[~[[*id]]? &scheme=`full`]]" />
<meta property="og:url" content="[[~[[*id]]? &scheme=`full`]]" />Или, например, вот так (не помню для чего, но как-то возникла проблема с предыдущим вариантом, которая решилась нижеописанным примером):
[[++site_url]][[*id:isnot=`[[++site_start]]`:then=`[[~[[*id]]]]`]]            
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.