Содержимое

404 ошибка

В комопнентах  показывается 404 ошибка и отдается соответтсвующий статус если если страница не существует. Для этого при вызовде комопнента должен быть вклчюен соовтетствующий параметр  "SET_STATUS_404" => "Y" и  "SHOW_404" => "Y"

<?
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
$APPLICATION->SetPageProperty("title", "");
$APPLICATION->SetPageProperty("keywords", "");
$APPLICATION->SetPageProperty("description", "");
$APPLICATION->SetTitle("Демо база знаний");
$APPLICATION->SetDirProperty('MDBASE_ROOT_URL', '/doc/');
$APPLICATION->IncludeComponent(
    "bxmaker:mdbase",
    ".default",
    [
        "IBLOCK_TYPE" => "doc",
        "CACHE_TYPE" => "A",
        "CACHE_TIME" => 60 * 60 * 24 * 10,
        "CACHE_GROUPS" => "Y",
        "COMPONENT_TEMPLATE" => ".default",
        "SEF_MODE" => "Y",
        "SEF_FOLDER" => "/doc/",
        "COMPOSITE_FRAME_MODE" => "A",
        "COMPOSITE_FRAME_TYPE" => "AUTO",
        "CANONICAL_URL" => "",
        "SET_STATUS_404" => "Y",
        "SHOW_404" => "Y",
        "FILE_404" => "",
        "MESSAGE_404" => "",
        "SEF_URL_TEMPLATES" => [
            "index" => "",
            "item" => "#IBLOCK_CODE#/",
            "section" => "#IBLOCK_CODE#/#SECTION_CODE_PATH#/",
            "detail" => "#IBLOCK_CODE#/#SECTION_CODE_PATH#/#ELEMENT_CODE#/",
            "search" => "#IBLOCK_CODE#/search/",
        ]
    ],
    false
);
?>
<?
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php"); ?>

Страницы без слеша

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

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On

   RewriteBase /
   

   
        #склейка /dsf -> /dsf/
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_URI} !^/[^/]+$
        RewriteCond %{REQUEST_URI} !(.*)/$
        RewriteRule ^(.*[^/])$ $1/ [L,R=301]
        

#... другие инструкции
        

</IfModule>```