редирект с помощью htaccess сайт.ru/index.php?r=контролер/экшен на сайт.ru/экшен.html

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем maxy666, 13 окт 2015.

  1. maxy666

    maxy666 Постоялец

    Регистр.:
    23 июл 2012
    Сообщения:
    123
    Симпатии:
    29
    Не получаеться сделать 301 редирект с
    site.ru/index.php?r=site/test

    на
    site.ru/test.html

    test - имя экшена


    Написал правило:

    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /
    RewriteRule %{REQUEST_URI} ^/index\.php?r=site/(.*) [L]
    RewriteRule ^(.*)$ Перейти по ссылке [R=301,L]

    Но оно не работает корректно.
    При проверке заголовков, выдаеться пере направление на

    site site.ru/index.php?r=site/test
    HTTP/1.1 301 Moved Permanently
    Date: Tue, 13 Oct 2015 13:58:16 GMT
    Server: Apache/2.2.27 (Unix) mod_ssl/2.2.27 OpenSSL/1.0.1e-fips
    Location: Перейти по ссылке
    Content-Length: 353
    Content-Type: text/html; charset=iso-8859-1

    То есть пропадает index.php, но остается ?r=site/


    Если есть какие то заготовки пожалуйста помогите или хотя бы ткните где можно почитать детальнее с примерами составления правил редикра с htaccess
     
  2. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    207
    Симпатии:
    267
    Для проверки переменных нужен RewriteCond
    Код:
    RewriteCond %{QUERY_STRING} ^r=site/(.*)
    RewriteRule ^index\.php$ http://site.ru/%1.html? [R=301,L]
    
    или так
    Код:
    RewriteCond %{THE_REQUEST} " /index\.php\?r=site/(\S+)"
    RewriteRule ^ http://site.ru/%1\.html? [R=301,L]
    
    Основные моменты работы mod_rewrite подробно разобраны в статье Перейти по ссылке
     
    maxy666 нравится это.
  3. Craze

    Craze Постоялец

    Регистр.:
    18 мар 2007
    Сообщения:
    90
    Симпатии:
    3
    Можете подсказать, как составить правило для такой конструкции:
    Перейти по ссылке

    Для всех ID. Чтобы был 301 редирект на главную страницу сайта. Или лучше отдавать 404 ошибку, если такой страницы нет?
     
  4. UJy

    UJy

    Регистр.:
    23 авг 2011
    Сообщения:
    351
    Симпатии:
    124
    Код:
    RewriteEngine On
    RewriteBase /
    RewriteRule %{QUERY_STRING} id=[\d]+&page=Main [NC]
    RewriteRule .* http://Site.ru/? [R=301,L]
    
     
  5. Craze

    Craze Постоялец

    Регистр.:
    18 мар 2007
    Сообщения:
    90
    Симпатии:
    3
    Сайт на Joomla 3
    При данной конструкции циклический редирект идет на сайте.
     
  6. UJy

    UJy

    Регистр.:
    23 авг 2011
    Сообщения:
    351
    Симпатии:
    124
    Интересненько... Может где-то в админке в настройках стоит указание главной страницы как "Перейти по ссылке"?
    Редирект то срабатывает...
     
  7. Craze

    Craze Постоялец

    Регистр.:
    18 мар 2007
    Сообщения:
    90
    Симпатии:
    3
    нет. это адрес старых страниц. Новые с sef идут.

    Вот полный файл htaccess

     
  8. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    207
    Симпатии:
    267
    Тут ошибка аналогична той, что в старт посте
    RewriteRule %{QUERY_STRING} заменить RewriteCond %{QUERY_STRING}
     
    UJy нравится это.
  9. UJy

    UJy

    Регистр.:
    23 авг 2011
    Сообщения:
    351
    Симпатии:
    124
    Что б я долго жил... Скопировал с примера из вопроса и не посмотрел. Спасибо комрад lag )))
    Код:
    RewriteEngine On
    RewriteBase /
    RewriteCond %{QUERY_STRING} id=[\d]+&page=Main [NC]
    RewriteRule .* http://Site.ru/? [R=301,L]
    
    Теперь заработает...