Перезапись не работает без завершающей косой черты

У меня проблемы с получением URL-адреса для работы БЕЗ ввода косой черты.

It's:

www.domain.com/shop/buy/products/show/range/

Правило перезаписи .htaccess:

RewriteRule ^shop/buy/([A-Za-z0-9]+)/show/([A-Za-z0-9\-\,]+)/?$  _shop/products.php?trg=${productmap:$1}&range=$2 [L]

Он работает с завершающей косой чертой (которую я не хочу использовать в URL-адресе), но не без нее. Я также должен добавить, что если бы я удалял '/show/' из URL-адреса (чего я не могу сделать), это работало бы без косой черты в конце или если 'range' содержал тире '-', как в 'new -продукт», это также работает.

Однако этот URL-адрес работает с завершающей косой чертой или без нее:

www.domain.com/shop/buy/products/show/range/color

Правило перезаписи .htaccess для этого URL:

RewriteRule ^shop/buy/([A-Za-z0-9]+)/show/([A-Za-z0-9\-\,]+)/([A-Za-z0-9\-\,]+)/?$    _shop/products.php?trg=${productmap:$1}&range=$2&color=$3 [L]

Как заставить работать первый URL без косой черты? Это может быть что-то действительно очевидное, поскольку я недавно новичок в использовании .htaccess, но теперь я часами смотрел на код и читал сообщения на форуме о перезаписи, но не смог решить эту проблему. Спасибо!


person Noak    schedule 24.01.2013    source источник
comment
Начните с очистки кеша браузера, убедившись, что это так, перед каждым тестом, потому что оба правила имеют необязательный /? в конце регулярного выражения.   -  person Felipe Alameda A    schedule 24.01.2013


Ответы (2)


Я не уверен, но попробуйте поставить /? в фигурных скобках: (/)?, я думаю, это сработает:

RewriteRule ^shop/buy/([A-Za-z0-9]+)/show/([A-Za-z0-9\-\,]+)([/]?)$  _shop/products.php?trg=${productmap:$1}&range=$2 [L]
person bumerang    schedule 24.01.2013
comment
Привет, Бумеранг, спасибо за предложение, но, к сожалению, оно не сработало :( - person Noak; 24.01.2013
comment
@Ноак, как насчет сейчас? ([/]?) Я плохо знаком с регулярными выражениями. Я обновил основной код ответа. - person bumerang; 24.01.2013
comment
Эй, почему бы тебе просто не пропустить это: /?$ если тебе действительно не нужно проверять, что это закончится после show/([A-Za-z0-9\-\,]+) Может быть, ты можешь просто дать: show/([A-Za-z0-9\-\,\/]+) - person bumerang; 24.01.2013
comment
Спасибо, Бумеранг, я тоже это пробовал, но без радости :-/ - person Noak; 24.01.2013

Вы можете протестировать этот код

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase   /
RewriteRule ^shop/buy/(.*?)/show/(.*)/(.*)$ _shop/products.php?trg=$1&range=$2&color=$3 [S,L,QSA]
RewriteRule ^shop/buy/(.*?)/show/(.*)$ _shop/products.php?trg=$1&range=$2 [S,L,QSA]

образец:

www.domain.com/shop/buy/products/show/range/

www.domain.com/shop/buy/products/show/range

перенаправить на:

www.domain.com/_shop/products.php?trg=products&range=range

и:

www.domain.com/shop/buy/products/show/range/color

www.domain.com/shop/buy/products/show/range/color/

перенаправить на:

www.domain.com/_shop/products.php?trg=products&range=range&color=color

Еще один способ: вы можете использовать только этот код

RewriteRule ^shop/buy/(.*?)/show/(.*)$ _shop/products.php?trg=$1&range=$2 [L,QSA]

после того, как диапазон разделения в php

list($range,$coler)=explode("/",$_GET['range']); 

Это тоже работа.

person mohammad mohsenipur    schedule 24.01.2013
comment
Спасибо, Мохаммад. Я не могу перенаправить www.domain.com/shop/buy/products/show/range, так как не могу найти способ сослаться на него. Я пытался закончить выражение с помощью (.*)$, но это не помогло. Спасибо хоть. - person Noak; 24.01.2013
comment
Этот код перенаправляется без изменения URL-адреса. Если вы хотите изменить URL-адрес, вы можете указать [R = 301, S, L, QSA] вместо [S, L, QSA] - person mohammad mohsenipur; 24.01.2013
comment
Это не сработало, к сожалению. Честно говоря, я бы предпочел, чтобы регулярное выражение работало так, чтобы URL-адрес можно было получить с косой чертой и без нее, а не начинать явное перенаправление с одной страницы на другую. Спасибо за вашу помощь. - person Noak; 24.01.2013
comment
Привет, Мохаммад, я понимаю, о чем ты говоришь, и не против перенаправить, если это решит проблему. Однако проблема в том, что я не могу найти способ вставить URL-адрес БЕЗ завершающей косой черты в .htaccess для его перенаправления. Имеет ли это смысл? - person Noak; 24.01.2013
comment
пожалуйста, поместите свой образец URL, который не работает правильно, теперь я точно знаю, где проблема. - person mohammad mohsenipur; 24.01.2013