Редирект 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
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.