Правильное написание правила в .htaccess

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

Статус темы:
Закрыта.
  1. goldyman

    goldyman

    Регистр.:
    6 мар 2008
    Сообщения:
    177
    Симпатии:
    29
    Уже несколько часов мучаюсь с корректным написанием правила для редиректа в Wordpress и никак не выходит, то не работает, то 500 ошибка. Само правило выглядит так:

    RewriteRule ^?p=29$ http://site.com/category/stranica/ [R=301,L]

    Данное правило дает 500 ошибку, пробовал ставить обратные слэши в первом условии, убирать другие правила, прописывать правило сразу после RewriteEngine On и RewriteBase /, пользовался поиском, но так и не удалось выявить ошибку. Когда прописываю что-то типа:

    RewriteRule ^page/$ http://site.com/category/stranica/ [R=301,L]

    все работает на ура, отсюда пришел к выводу, что дело в первом условии ?p=29. Кто подскажет, где я туплю?
     
  2. ShoxMaster

    ShoxMaster

    Регистр.:
    3 дек 2008
    Сообщения:
    393
    Симпатии:
    150
    Символ ? означает что под маску подходит 0 или 1 символ. Если его экранировать то толку тоже будет ноль т.к. это баг апача. Есть выход - проверять %{QUERY_STRING}:
    Код:
    RewriteCond %{QUERY_STRING} ^p=29$
    RewriteRule .* http://site.com/category/stranica/ [R=301,L]
     
    goldyman нравится это.
  3. goldyman

    goldyman

    Регистр.:
    6 мар 2008
    Сообщения:
    177
    Симпатии:
    29
    Спасибо. Просто нужно отредиректить более 150 страниц и необходимо такую конструкцию для каждого адреса прописывать? Я кстати, еще пробовал варианты redirect 301, Redirect permanent и пр, также глюк выходит.
     
  4. ShoxMaster

    ShoxMaster

    Регистр.:
    3 дек 2008
    Сообщения:
    393
    Симпатии:
    150
    Потому что это баг апача, я где-то в ветке ссылку кидал на офф. источник.
    И да, и нет, нужно найти что-то общее, возможно удастся написать правило, которое зацепить хоть бОльшую часть адресов.
     
  5. goldyman

    goldyman

    Регистр.:
    6 мар 2008
    Сообщения:
    177
    Симпатии:
    29
    Редирект, что вы привели дает окончание странице ?p=29, т. е. получается так:

    http://site.com/category/stranica/?p=29

    Можно как-то избавиться от этого окончания?

    Вряд ли, скорее всего придется для каждой страницы прописывать, общего только знак ?. :)
     
  6. ShoxMaster

    ShoxMaster

    Регистр.:
    3 дек 2008
    Сообщения:
    393
    Симпатии:
    150
    Не думал, что будет сохранятся Query String.
    Код:
    RewriteEngine on
    RewriteCond %{QUERY_STRING} ^p=29$
    RewriteRule (.*) /category/stranica/? [R=301,L]
     
    goldyman нравится это.
  7. penguen

    penguen

    Регистр.:
    7 янв 2007
    Сообщения:
    821
    Симпатии:
    93
    index.php?cstart=25&do=year&year=2007

    Это перемен. скрипта, где 25 это номер страницы, а 2007 это год
    Как правильно составить ЧПУ, помогите пожалуйста.
    Делаю так
    RewriteRule ^page/(.*)/(.*)/(.*)(/?)+$ index.php?cstart=$1&do=year&year=$2 [L]

    Не хотит работать вот так. В ЧПУ я не силен
     
  8. ShoxMaster

    ShoxMaster

    Регистр.:
    3 дек 2008
    Сообщения:
    393
    Симпатии:
    150
    penguen
    Код:
    RewriteEngine on
    RewriteRule ^page/(.*)/(.*)/$ /index.php?cstart=$1&do=year&year=$2 [L]
     
  9. ikolibri

    ikolibri

    Регистр.:
    3 ноя 2008
    Сообщения:
    205
    Симпатии:
    14
    добрый день.
    изломал голову, всякое попробовал - не работает.
    подскажите как сделать, чтобы при нажатии на такую ссылку:

    http://site.com/index.php?route=common/home

    открывался такой адрес http://site.com/

    ?
     
  10. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    Код:
    RewriteEngine On
    RewriteCond %{QUERY_STRING} ^route=common/home$ [NC]
    RewriteRule ^index.php$ /? [L,R]
     
    ikolibri нравится это.
Статус темы:
Закрыта.