#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
Комментариев нет:
Отправить комментарий