Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

.htaccess и 301 редирект

48K
08 июня 2010 года
-=Orlangur=-
14 / / 10.09.2009
Как мне с помощью RewriteRule превратить ссылку
 
Код:
http://mydomain.com/catalog/index.php?page=3
в
 
Код:
http://mydomain.com/catalog/page_3/
чтоб обязательно 301 редирект был так же ссылка может иметь такой вид
 
Код:
http://mydomain.com/catalog/index.php?page=3&cat=2
принимать такой линк
 
Код:
http://mydomain.com/catalog/page_3/rubr_2/
Помогите никак не получается.
253
09 июня 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: -=Orlangur=-
Помогите никак не получается.


Что сами сделали? Такие вопросы тут появляются каждый день, можно использовать поиск и найти ответ за минуту.

Редирект в mod_rewrite делается флагом [R=код]. 301 по-умолчанию, если код опущен: [R].

48K
09 июня 2010 года
-=Orlangur=-
14 / / 10.09.2009
Цитата: Proger_XP
Что сами сделали? Такие вопросы тут появляются каждый день, можно использовать поиск и найти ответ за минуту.

Редирект в mod_rewrite делается флагом [R=код]. 301 по-умолчанию, если код опущен: [R].


Делаю вот так:

 
Код:
RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} ^(.*&)?page=([0-9]+)?$ [NC]
RewriteRule  ^(notices/index\.php)?$ catalog/page_%2/? [NC,R=301,L]

Он нормально делает линк http:// mydomain.com/catalog/page_3/ как получить второй вариант типа http:// mydomain.com/catalog/page_3/rubr_2/ как грамотно разобрать QUERY_STRING и как прописать правило?
253
10 июня 2010 года
Proger_XP
1.5K / / 07.08.2004
Ну, если у вас переменные всегда будет в таком порядке (?page=&cat=), то просто допишите RewriteCond: page=[0-9]*(&cat=[0-9]*)? и добавьте %3 к RR.

Если нужно искать в любом порядке, то сделайте два блока RC+RR. Например:

 
Код:
RewriteCond %{QUERY_STRING} [&^]page=([0-9]*)[&$] [NC]
RewriteRule  ^(notices/index\.php)?$ catalog/page_%1/? [NC]

RewriteCond %{QUERY_STRING} [&^]cat=([0-9]*)[&$] [NC]
RewriteRule  ^(catalog/page_[0-9]*)/?$ $1/cat_%1/? [NC,R,L]

RewriteRule ^(catalog/page_[0-9]*/?)$ $1 [NC,R,L]


Не уверен, поймёт ли mod_rewrite начало/конец строки в [], если нет, то поменяйте это на (&|$) или (&.*)?$, аналогично с ^.
48K
11 июня 2010 года
-=Orlangur=-
14 / / 10.09.2009
Цитата: Proger_XP
Ну, если у вас переменные всегда будет в таком порядке (?page=&cat=), то просто допишите RewriteCond: page=[0-9]*(&cat=[0-9]*)? и добавьте %3 к RR.

Если нужно искать в любом порядке, то сделайте два блока RC+RR. Например:

 
Код:
RewriteCond %{QUERY_STRING} [&^]page=([0-9]*)[&$] [NC]
RewriteRule  ^(notices/index\.php)?$ catalog/page_%1/? [NC]

RewriteCond %{QUERY_STRING} [&^]cat=([0-9]*)[&$] [NC]
RewriteRule  ^(catalog/page_[0-9]*)/?$ $1/cat_%1/? [NC,R,L]

RewriteRule ^(catalog/page_[0-9]*/?)$ $1 [NC,R,L]


Не уверен, поймёт ли mod_rewrite начало/конец строки в [], если нет, то поменяйте это на (&|$) или (&.*)?$, аналогично с ^.



Попробовал как написано выше

 
Код:
RewriteCond %{QUERY_STRING} ^(.*&)?page=([0-9]*)(&.*)?$ [NC]
RewriteRule  ^(notices/index\.php)?$ catalog/page_%2/? [NC]

RewriteCond %{QUERY_STRING} ^(.*&)cat=([0-9]*)(&.*)?$ [NC]
RewriteRule  ^(catalog/page_[0-9]*)/?$ $1/cat_%2/? [NC,R=301,L]

RewriteRule ^(catalog/page_[0-9]*/?)$ $1 [NC,R=301,L]

Получается что при таком виде линка http:// mydomain.com/catalog/index.php?page=3 так и при этом http:// mydomain.com/catalog/index.php?page=3&cat=2 редирект совершается одинаково на http:// mydomain.com/catalog/page_3/
253
11 июня 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: -=Orlangur=-
Получается что при таком виде линка http:// mydomain.com/catalog/index.php?page=3 так и при этом http:// mydomain.com/catalog/index.php?page=3&cat=2 редирект совершается одинаково на http:// mydomain.com/catalog/page_3/


А, ну да, я же стираю QS в первом RR. Убери ? из конца первого RR и добавь его в конец 3: "$1?".

Кстати, зачем ты убрал ? из: ^(.*&)[COLOR="Red"]?[/COLOR]cat?
Тогда у тебя не будет совпадений с запросами вида ?cat=c&page=p

48K
11 июня 2010 года
-=Orlangur=-
14 / / 10.09.2009
Цитата: Proger_XP
А, ну да, я же стираю QS в первом RR. Убери ? из конца первого RR и добавь его в конец 3: "$1?".

Кстати, зачем ты убрал ? из: ^(.*&)[COLOR="Red"]?[/COLOR]cat?
Тогда у тебя не будет совпадений с запросами вида ?cat=c&page=p


Все заработало. Переставил как написано и вернул [COLOR="Red"]?[/COLOR]. Спасибо.

61K
22 июня 2010 года
Labia
4 / / 17.06.2010
мне вот нужно бы узнать, как правильно защитить директорию паролем с помощью htaccess?

Чтоб было так-же как вход в админку AC, при нормальных настройках безопасности.
253
22 июня 2010 года
Proger_XP
1.5K / / 07.08.2004
Статья вам в помощь.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог