Непонятная проблема с mod_rewrite

SK
На сайте с 06.02.2007
Offline
51
559

Приветствую всех!

Есть сайт. Пытаюсь сделать преобразование URL'а в ЧПУ по формуле:

RewriteRule ^country/([A-Za-z-]+)/?$ country.php?country=$1 [L]

то есть, хочу преобразовать

http://www.site.ru/country.php?country=india в http://www.site.ru/country/india/

Казалось бы, простейшее преобразование, да и в сайтостроении я не первый год, но...

Работает данная конструкция только тогда, когда на конце нет слэша (http://www.site.ru/country/india). То есть, в этом случае, когда в конце нет слэша, я нормально получаю из адреса GET-переменную (india). Как только пытаюсь добавить в конец URL'а слэш (http://www.site.ru/country/india/)- GET-переменную не получаю :(

Вопрос: что я делаю не так?

Что самое интересное, рядом в этом же .htaccess'е прописано другое правило, которое прекрасно работает с конечным слэшем! Вот оно:

RewriteRule ^([a-z-]+)/([a-z-]+)/?$ category.php?parentcat=$1&category=$2 [L]

Буду благодарен за любые конструктивные мысли!

BIRTH : Completed successfully. Exit code 0. LIFE : [||||||..............] 37% done. DEATH : Awaiting in system queue...
ДП
На сайте с 23.11.2009
Offline
203
#1

Это, конечно, скорее костыль, а не конструктивная мысль - но напишите два правила, одно для урла без слеша, второе со слешем.

gormarket
На сайте с 29.12.2010
Offline
47
#2

Проверил на локальном сервере правило

RewriteRule ^country/([A-Za-z-]+)/?$ country.php?country=$1 [L]

работают оба варианта

есть только одно предположение:

у Вас возможно имеются еще правила в .htaccess, которые оказывают влияние на адрес со слэшем.

Это легко проверить, если перенести правило в самое начало, сразу после

RewriteEngine on

RewriteBase /

добавить в правило установку некой переменной, а перед правилом вставить проверку наличия этой переменной с выходом при ее наличии


RewriteCond %{ENV:REDIRECT_RWR} ^yes$
RewriteRule .* - [L]
RewriteRule ^country/([A-Za-z-]+)/?$ country.php?country=$1 [L,E=RWR:yes]

Если в этом случае со слэшем заработает, значит какое-то еще правило оказывало влияние.

Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
Ёхан Палыч
На сайте с 07.05.2006
Offline
169
#3
SkyKiller:
Вопрос: что я делаю не так?
Что самое интересное, рядом в этом же .htaccess'е прописано другое правило, которое прекрасно работает с конечным слэшем! Вот оно:
RewriteRule ^([a-z-]+)/([a-z-]+)/?$ category.php?parentcat=$1&category=$2 [L]

Если это правило стоит в начале, то, естественно, запрос http://www.site.ru/country/india/ будет вести на category.php?parentcat=country&category=india. Поменяйте местами правила, вначале должны идти более строгие правила.

SK
На сайте с 06.02.2007
Offline
51
#4
gormarket:

есть только одно предположение:
у Вас возможно имеются еще правила в .htaccess, которые оказывают влияние на адрес со слэшем.
Это легко проверить, если перенести правило в самое начало, сразу после
RewriteEngine on
RewriteBase /

Действительно, так и есть! Перенёс правило в начало, после RewriteBase - всё заработало! Сейчас буду разбираться, как правильно .htaccess составить. Всем, кто принял участие в решении моей проблемы - большое спасибо! :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий