Бывает, что после переноса сайта или настройки многосайтовости страницы, которые выводятся динамически с ЧПУ, выдают такое: Not Found. The requested URL ... was not found on this server.

Как это исправить?

Например, у вас есть каталог товаров, на странице index.php стоит компонент вывода, инфоблок настроен, urlrewrite.php в порядке, а вот not found, и все тут.

Решение проблемы простое, но требует правки настроек сервера. В Битриксе есть свой обработчик 404 ошибки, и сообщение об отсутствующей странице выводится в шаблоне сайта. А если не в шаблоне, значит, Битрикс ошибку обработать не может, и её обрабатывает Апач.

Как такое происходит? Чтобы Битрикс вывел динамическую страницу с ЧПУ, ему нужен файл urlrewrite.php, где прописаны правила обработки ЧПУ. Путь к urlrewrite.php прописан в файле .htaccess, который лежит в корне сайта.

В общем случае он должен выглядеть так:

 Options -Indexes 
ErrorDocument 404 /404.php

php_value mbstring.func_overload 2
php_value mbstring.internal_encoding utf-8
php_value max_input_vars 20000

<IfModule mod_php5.c>
  php_flag session.use_trans_sid off
  #php_value display_errors 1
  #php_value mbstring.internal_encoding UTF-8
</IfModule>

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
  RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
  RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
</IfModule>

<IfModule mod_dir.c>
  DirectoryIndex index.php index.html
</IfModule>

<IfModule mod_expires.c>
  ExpiresActive on
  ExpiresByType image/jpeg "access plus 3 day"
  ExpiresByType image/gif "access plus 3 day"
  ExpiresByType image/png "access plus 3 day"
  ExpiresByType text/css "access plus 3 day"
  ExpiresByType application/javascript "access plus 3 day"  
</IfModule>

Значит, или в .htaccess не прописан блок 

 <IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
  RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
  RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
</IfModule>

или в конфиге Апача не включена обработка файла .htaccess, и инструкции в нём не выполняются.

Чтобы обработка .htaccess заработала, пропишите в параметрах виртуального сервера в файле конфигурации Апача 

AllowOverride All
и перезапустите Апач.

Автор:  Дмитрий Иванов
Вернуться к блогам