Редирект страниц без слэша (разрешить .html) htaccess

Тема в разделе "Регулярные выражения", создана пользователем denik, 17 июл 2014.

Модераторы: xpert13
  1. denik

    denik Постоялец

    Регистр.:
    1 июл 2011
    Сообщения:
    80
    Симпатии:
    43
    Доброго дня!

    Столкнулся с задачей, необходимо делать редирект со страниц без слэша на те же страницы, только добавив слэш средствами .htaccess.
    Например, если открыли Перейти по ссылке
    Но, страницы html должны работать. Например Перейти по ссылке

    Пробовал так, но это почему-то не срабатывает:
    Код:
    #slash
    RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
    RewriteCond %{REQUEST_URI} !^(.*)\.html$
    RewriteRule .* %1/ [R=301,L]
    Вернее срабатывает, но так же позволяет страницы типа:
    Перейти по ссылке
    Перейти по ссылке
    ...

    Помогите найти ошибку...? :)
     
  2. ynkas007

    ynkas007 Создатель

    Регистр.:
    14 дек 2009
    Сообщения:
    10
    Симпатии:
    1
    как-то так:
    Код:
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !(.*)/$
    RewriteRule ^(.*[^/])$ $1/ [L,R=301]
    правда может конфликтовать с другими RewriteRule
     
    denik нравится это.
  3. pirat911surgut

    pirat911surgut Писатель

    Регистр.:
    28 авг 2014
    Сообщения:
    1
    Симпатии:
    1
    Попробуй этот код:
    Код:
    RewriteCond %{REQUEST_URI} /+[^\.]+$
    RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
    Добавляет слеш ко всем урлам, которые не заканчиваются на слеш, кроме урлов вида domain.com/folder/asd.html (я имею в виду содержащих точку)
     
    shot5 нравится это.
  4. rex1963

    rex1963

    Регистр.:
    19 фев 2007
    Сообщения:
    228
    Симпатии:
    47
    Код:
    #добавл¤ем где надо слеш
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !\.(php|js|css|jpe?g|html?|png|gif|rar|zip|gz|7z)$
    RewriteCond %{REQUEST_URI} !/$
    RewriteRule ^(.*)$ $1/ [L,R=301]
    #убираем дубли слешь
    
    RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
    RewriteRule (.*) %1/%2 [R=301,L] 
    где то так
     
  5. ofolfa

    ofolfa Создатель

    Регистр.:
    15 авг 2008
    Сообщения:
    27
    Симпатии:
    7
    rex1963, не обязательно делать проверку для картинок и архивов, так как перед этим есть проверка (%{REQUEST_FILENAME} !-f) на существование файла.
    И нужно быть внимательным, POST запрос отправленный на страницу без слеша срабатывать не будет, так как будет срабатывать редирект :)
     
    Последнее редактирование: 23 сен 2014
  6. rex1963

    rex1963

    Регистр.:
    19 фев 2007
    Сообщения:
    228
    Симпатии:
    47
    Страница со слешем - чото я туплю, но как это?
    Для меня адрес asdf.jj/cft/privet.htm = страница, где здесь нужен флешь?
    asdf.jj/cft/ - директория, но нужно учитывать, что для поисковика asdf.jj/cft/ и asdf.jj/cft адреса разные, и нужно приводить адрес директории к одному виду, либо со слешем, либо без него. следует проверять чтобы не было возможности сделать исходный адрес таким asdf.jj/cft///, или таким asdf.jj/cft////ggg/privet.htm.