Страницы

Поиск по вопросам

воскресенье, 15 декабря 2019 г.

Почему съедает слеш в скобочной группе регулярного выражения?

#php #регулярные_выражения #htaccess


.htaccess

RewriteRule ^activation-account/(.+)/login([a-zA-Z0-9_]+)$ web/index.php?r=registration/activation-register/activation&key_active=$1&key_login=$2 [L]


Переходим по ссылке
http://myhost//activation-account/$2y$10$Xl40W/SKTOXYcxfCxGszr.9tbd//lNJSVJTpBh4umjWf/9GNMSlJy/loginfiko

Ловим переменную в php key_active

Она возвращает:
$2y$10$Xl40W/SKTOXYcxfCxGszr.9tbd/lNJSVJTpBh4umjWf/9GNMSlJy

То есть на этом промежутке 9tbd/l убирается слеш а должно быть так 9tbd//l
    


Ответы

Ответ 1



Вот рабочий вариант редиректа для Apache: RewriteEngine On RewriteCond %{REQUEST_URI} ^/*activation-account/(.+)/login(\w+)$ RewriteRule .* web/index.php??r=registration/activation-register/activation&key_active=%1&key_login=%2 [L] В переменных запроса он ни чего не имеет против двойного слеша. UPD + мой ответ на вопрос: Как сделать всё и сразу в mod_rewrite?

Ответ 2



Мне кажется, тут проблема не в регулярном выражении а в том как apache обрабатывает URL, а точнее в web-стандартах. Условно говоря любое количество слешей всегда читается как один слеш. Например http://myhost/activation-account http://myhost//activation-account http://myhost///activation-account и http://myhost////////////activation-account это путь к одной и той-же странице. Правельный путь решить эту проблему - использовать urlencode/urldecode или base64

Комментариев нет:

Отправить комментарий