вторник, 1 февраля 2011 г.

Добавить обязательный слеш в конце URL с помощью htaccess

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !example.php
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]

Последняя строка осуществляет переход со страницы без замыкающего слеша на страницу со слешем. Данный трюк важен для SEO, чтобы рейтинг страницы не расщеплялся на две страницы: со слешем и без него






P.S. Для nginx:
Добавить слеш если нету: rewrite ^(.*[^/])$ $1/ permanent;
Как убрать все двойные слеши (nginx)

11 комментариев:

  1. Помогло, спасибо. Добавил в закладки!

    ОтветитьУдалить
  2. А как сделать тоже самое для Nginx?
    И два подряд // в один / на конце для Nginx, тоже интересно.

    ОтветитьУдалить
  3. rewrite ^(.*[^/])$ $1/ permanent; - добавить слеш


    Убрать двойные:
    set $test_uri $scheme://$host$request_uri;
    if ($test_uri != $scheme://$host$uri$is_args$args) {
    rewrite ^ $scheme://$host$uri$is_args$args? permanent;
    }

    ОтветитьУдалить
  4. Очень вам благодарен. Спасибо.

    ОтветитьУдалить
  5. А чтобы наоборот, сделать переадресацию со страницы со слешом на страницу без слеша ( я так понимаю , что всё-равно) на какую переадресовывать, главное, чтобы не было дублей)...

    ОтветитьУдалить
  6. Может быть ещё подскажите как два слеша заменить на один, только не в конце, а в середине на любом из уровней

    ОтветитьУдалить
  7. а почему у меня подставляет лишнее в адрес при попытке перейти на страницу без слеша http://домен.ru/katalog ? Т.е. перенаправляет на http://домен.ru/home/пользователь_хостинга/data/www/домен.ru/katalog/ а не на http://домен.ru/katalog/

    ОтветитьУдалить
  8. Подскажите, как при этом сделать, чтобы слэш не добавлялся в конце, если в адрессной строке ввести адресс файла, еще при этом учитывая, что в урл могут быть get-параметры php файла? Т.е. чтобы флэш добавлялся только для папок.

    ОтветитьУдалить
  9. А как для rails убрать лишние слеши в конце URL корня?

    ОтветитьУдалить