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

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

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

    denik Постоялец

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

    Столкнулся с задачей, необходимо делать редирект со страниц без слэша на те же страницы, только добавив слэш средствами .htaccess.
    Например, если открыли http://site.com/about => http://site.com/about/
    Но, страницы html должны работать. Например http://site.com/contacts.html

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

    Помогите найти ошибку...? :)
     
  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.