Редирект URL со слэшем в конце на без слэша
        Это не вопрос, а решение.
Ниже код плагина, который решает задачу: редирект URL со слэшем в конце на URL без слэша в конце.
Гугл/яндекс в течение часа дал ответ на обратную задачу (редирект без слэша в конце на со слэшем).
Делюсь доработкой с надеждой, что это вылезет в топ и поможет сохранить время следуюшим поколениям :)
Также сделаны настройки по пунктам 1-6 отсюда.
Плагин настраивается на событие OnLoadWebDocument:
    
    
                                                                                
            Ниже код плагина, который решает задачу: редирект URL со слэшем в конце на URL без слэша в конце.
Гугл/яндекс в течение часа дал ответ на обратную задачу (редирект без слэша в конце на со слэшем).
Делюсь доработкой с надеждой, что это вылезет в топ и поможет сохранить время следуюшим поколениям :)
Также сделаны настройки по пунктам 1-6 отсюда.
Плагин настраивается на событие OnLoadWebDocument:
<?php
if ($modx->event->name == 'OnLoadWebDocument') {
  $request = $_SERVER['REQUEST_URI'];
  $params = '';
  if (strpos($request, '?') !== false) {
  	list($request, $params) = explode('?', $request);
  }
  $uri = $request;
  if(!empty($uri) && strpos($uri, '.') === false && substr($uri, -1, 1) == '/') {
    $uri = substr($uri, 0, -1);
    if (!empty($params)) {
      $uri .= '?' . $params;
    }
    $modx->sendRedirect($uri, array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
  }
}    Комментарии: 7
                А чего не через .htaccess или nginx?            
                    
                Это встроено в modx уже. Дружественные урлы и параметр container_suffix… просто оставьте его пустым и слешей не будет.            
                    
                С этим решение перестали работать ссылки вида www.domen.ru/?utm
Возможно только у меня.
                    Возможно только у меня.
                Через .htaccess заработало это:
RewriteEngine On
RewriteRule ^(.*)\/$ $1 [R=301,L]
                    RewriteEngine On
RewriteRule ^(.*)\/$ $1 [R=301,L]
                А вход в админку работает? У меня без / на конце в админку не входит «Страница недоступна».            
                    
                Работает.
Полностью файл .htaccess выглядит так:
Добавлен [[Canonical]]
Тег base не удалял.
Плагин автора поста не использовал.
Все работает корректно (хостинг виртуальный, reg. ru)
                    Полностью файл .htaccess выглядит так:
RewriteEngine On
RewriteRule ^(.*)\/$ $1 [R=301,L]
RewriteBase /
RewriteRule "/\.|^\.(?!well-known/)" - [F]
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} (.+)$
RewriteRule ^(.*)$ https://www.%1/$1 [R=301,L] .
RewriteCond %{SERVER_PORT} !^443
RewriteRule (.*) https://www.domen.ru/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]Сделаны пункты с 1 по 6.Добавлен [[Canonical]]
Тег base не удалял.
Плагин автора поста не использовал.
Все работает корректно (хостинг виртуальный, reg. ru)
                Каждой папки можно указывать свой .htaccess и свои правила редиректа. Для того, что бы работала админка достаточно в папку /manager добавить свой .htaccess с директивой RewriteEngine Off и на админку не будет действовать правила корневого .htaccess            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.