2016-12-03 4 views
0

Я пытаюсь использовать категории в чистом виде в моих URLs так:Htaccess RewriteRule - образец не соответствует

website.com/category

В URL категории записываются следующим образом: Некоторые случайные примеры:

Животные
Потребительская электроника
books- & -Comics
Внешний-Hard-диски
Форма, -B eauty- & -здоровье
Блэка & -White-TV
The-приключения-Of-Тинтина
фритюрницы, -Waffle-makers- & -Cooking
и т.д ...

Как вы можете видеть, существует случайная комбинация слов (с начальным верхним регистром), символы «-», «,» и «&». Есть больше комбинаций, чем примеры.

С переписывание Я пытаюсь получить категории в переменной, как это:

RewriteRule ^([\w-&]+)$ /categories.php?mcn=$1 [L,NC] 

Это не работает. Если я прочитал переменную, которую я хотел с «Books--Comics» в категориях.php, я получаю только «Books-», в то время как это должно быть «Books- & -Comics».

Когда я добавить «» в классе персонажа, как это:

RewriteRule ^([\w,-&]+)$ /categories.php?mcn=$1 [L,NC] 

Я получаю внутреннюю ошибку сервера.

Как должно выглядеть RewriteRule, чтобы соответствовать примерам категорий и правильно их вводить в переменную?

ответ

0

Для вашей первой проблемы проблема заключается в том, что ваши параметры декодируются, и поэтому & запускает новый параметр URL. Вы можете исправить это, добавив в ваше правило флаг B.

Ваша вторая проблема заключается в том, что шаблон ^([\w,-&]+)$ недействителен. Он пытается совместить любой символ слова или любой символ между , и &. (Ascii 44 & 38), потому что это не в порядке, регулярное выражение выходит из строя. Поскольку вы хотите совместить символ -, а не использовать его в качестве индикатора диапазона, он должен быть экранирован.

С учетом этих изменений сделано ваше правило:

RewriteRule ^([\w,\-&]+)$ /categories.php?mcn=$1 [L,NC,B] 

Помощник регулярное выражение, как regex101 может быть огромная помощь в создании ваших правил.

+0

Ik выглядит так же, как и флаг B. Это ускользает от Backreferences? – Thoaren

+0

@Thoaren, да. Это правильно - флаг B - это то, что позволяет использовать специальные символы в вашем URL, удаляя обратные ссылки. – Gerrit0