Помогите составить 2 правила преобразования

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем LodeRunner, 31 мар 2011.

  1. LodeRunner

    LodeRunner

    Регистр.:
    10 фев 2010
    Сообщения:
    220
    Симпатии:
    12
    Помогите пожалуйста составить правила преобразования ссылок. Нужно сделать 2 правила.

    1) Нужно все ссылки вида:
    Код:
    www.site.ru/index.php/page
    перенаправлять на:
    Код:
    www.site.ru/page
    2) Нужно ссылку:
    Код:
    www.site.ru/index.php?option=com_content&view=article&id=9
    преобразовать в ссылку:
    Код:
    www.site.ru/banner
    "banner" - это уникальное имя страницы.
    Простой редирект 301 тут не работает, т.к. ссылка site.ru/bannerизначально не работает.
    Код:
    Redirect 301 /index.php?option=com_content&view=article&id=9 http://www.site.ru/banner
     
  2. citrus

    citrus Постоялец

    Регистр.:
    5 ноя 2006
    Сообщения:
    58
    Симпатии:
    8
    RewriteRule ^index.php/page$ /page [L]
    RewriteRule ^banner$ /index.php?option=com_content&view=article&id=9 [L]
     
    LodeRunner нравится это.
  3. LodeRunner

    LodeRunner

    Регистр.:
    10 фев 2010
    Сообщения:
    220
    Симпатии:
    12
    Это работает для уникальной страницы. Спасибо.
    А как сделать, чтобы это правило работало для всех страниц? Т.е. чтобы не прописывать это правило для каждой страницы в отдельности, а прописать сразу одной строкой для всех возможных вариантов страниц? Т.е. ссылка:
    Код:
    www.site.ru/index.php/любая страница
    
    редиректит на:
    Код:
    www.site.ru/любая страница
    
    Попробовал написать так, но не работает:
    Код:
    RewriteRule ^index.php/$1 /$1 [L]
    И можно ли [L] заменить на [R=301,L]?

    А это не работает почему-то...
     
  4. ShoxMaster

    ShoxMaster

    Регистр.:
    3 дек 2008
    Сообщения:
    393
    Симпатии:
    150
    Да, это уже будет редирект з 301-м кодом ответа серера. У меня работает с таким флагом.
    А почему оно должно работать? :)
    Код:
    RewriteEngine on
    RewriteRule ^index.php/(.*)$ /$1 [R=301,L]
     
    LodeRunner нравится это.
  5. LodeRunner

    LodeRunner

    Регистр.:
    10 фев 2010
    Сообщения:
    220
    Симпатии:
    12
    Все не могу выучить этот мод_реврайт и регулярные выражения - не встречал в сети нормальных обучалок, для меня это темный лес.
    Спасибо!

    Но вот это все равно не работает:
    Код:
    RewriteRule ^banner$ /index.php?option=com_content&view=article&id=9 [R=301,L]
    Никак вообще не редиректится, наверное у Джумлы как-то по-другому с подобными ссылками надо поступать.
     
  6. ShoxMaster

    ShoxMaster

    Регистр.:
    3 дек 2008
    Сообщения:
    393
    Симпатии:
    150
    Без разницы какая CMS, возможно оно перебивается другим правилом. Скиньте код .htaccess и URL сайта.
     
  7. LodeRunner

    LodeRunner

    Регистр.:
    10 фев 2010
    Сообщения:
    220
    Симпатии:
    12
    ShoxMaster
    Я не так выразился. Сейчас все объясню.
    Вот такое условие работает(я там в слове banner добавил еще слеш, т.к. без него не работала ссылка со слешем на конце:(
    Код:
    RewriteRule ^banner/$ /index.php?option=com_content&view=article&id=9 [R=301,L]
    Т.е. в этом примере я ввожу адрес:
    Код:
    www.site.ru/banner
    и после этого меня сразу редиректит на адрес:
    Код:
    www.site.ru/index.php?option=com_content&view=article&id=9
    Все хорошо, за исключением одного 'но' - мне нужно, чтобы какой я адрес ввел, такой и отображался бы в адресной строке, но редиректил бы меня по нужному адресу. Т.е. чтобы после того как я введу адрес:
    Код:
    www.site.ru/banner
    меня бы перекидывало на адрес:
    Код:
    www.site.ru/index.php?option=com_content&view=article&id=9
    НО в строке браузера отображался бы адрес:
    Код:
    www.site.ru/banner
    Т.е. чтобы люди не видели настоящий длинный адрес.

    Такое вообще возможно смастерить в .htaccess или нереально?
     
  8. ShoxMaster

    ShoxMaster

    Регистр.:
    3 дек 2008
    Сообщения:
    393
    Симпатии:
    150
    От оно чё....:)
    Тогда правило, что написал citrus - правильное. Только есть одно замечание, т.к. я бы поставил редирект со слешем и без:
    Код:
    RewriteRule ^banner/?$ /index.php?option=com_content&view=article&id=9 [L]
    Вполне возможно :D
     
    LodeRunner нравится это.
  9. LodeRunner

    LodeRunner

    Регистр.:
    10 фев 2010
    Сообщения:
    220
    Симпатии:
    12
    Ок, ребят, спасибо вам! Все заработало!)

    Первоначально не работало скорее всего из-за того, что я кэш в браузере не чистил после изменений в файле .htaccess. После чистки все заработало. Сейчас тоже наблюдается такая картина - если что-то изменил и кэш не почистил, то изменения не вступают в силу, т.е. браузер работает как-будто автономно.

    Добавлено через 4 минуты
    Ну и напоследок еще 1 вопрос, ребят, подскажите.
    Нужно редиректить ссылки вида:
    Код:
    www.site.ru/any_page/index.php
    на ссылки вида:
    Код:
    www.site.ru/any_page/
    В общем надо обрезать у ссылок окончание index.php
     
  10. ShoxMaster

    ShoxMaster

    Регистр.:
    3 дек 2008
    Сообщения:
    393
    Симпатии:
    150
    Код:
    RewriteRule ^(.*)/index.php /$1 [R=301,L]
     
    LodeRunner нравится это.