.htaccess url закодированная строка, не переходящая на страницу правильно

У меня есть правило перезаписи в .htaccess

RewriteRule ^page/(.*)$ my-php-page.php?cid=$1

Я передаю закодированную строку, которая содержит символы типа = и + – это закодированная строка;

V1ihnKpip6WpnY7Wm5zn2+6YUtLf2KCh4eKY

Когда в полном URL-адресе

http://www.example.com/my-php-page.php?cid=V1ihnKpip6WpnY7Wm5zn2+6YUtLf2KCh4eKY

теперь это не работает из-за знака + . Поэтому я хочу отправить cid urlencoded, который затем станет;

http://www.example.com/my-php-page.php?cid=V1ihnKpip6WpnY7Wm5zn2%2B6YUtLf2KCh4eKY

Знак + становится %2B . Это отлично работает, если только я не пробовал это через RewriteRule в .htaccess – он не работает. Таким образом, URL-адрес будет

http://www.example.com/page/V1ihnKpip6WpnY7Wm5zn2%2B6YUtLf2KCh4eKY

Файл mypage.php фактически получает cid как V1ihnKpip6WpnY7Wm5zn2 6YUtLf2KCh4eKY по какой-то причине заменяя %2B пробелом.

Любые идеи, почему это может быть так? И как я могу это исправить. Большое спасибо за помощь.

РЕДАКТИРОВАТЬ

Я просто нашел это решение – PHP $ _GET var с urlencode и «&» ошибкой – но мне было интересно, было ли более элегантное решение в .htaccess чем иметь urlencode строку дважды?

Попробуйте добавить флаг перезаписи B Этот флаг сообщает mod_rewrite, чтобы избежать обратных ссылок, в документации сказано следующее :

_rewrite должен удалять URL-адреса перед их сопоставлением, поэтому обратные ссылки не будут отображаться в момент их применения. Используя флаг B, не буквенно-цифровые символы в обратных ссылках будут экранированы.

Поскольку символ % зарезервирован для обратных ссылок для группировок, согласованных в RewriteCond предшествующих RewriteRule , mod_rewrite рассматривает их по-разному и может в конечном итоге попытаться заменить %2 пустой обратной репутацией.

Итак, ваше правило должно выглядеть так:

 RewriteRule ^page/(.*)$ my-php-page.php?cid=$1 [B] 

Если я правильно понял, перенаправить этот URL-адрес:

http://www.example.com/page/V1ihnKpip6WpnY7Wm5zn2+6YUtLf2KCh4eKY к этому

http://www.example.com/my-php-page.php?cid=V1ihnKpip6WpnY7Wm5zn2+6YUtLf2KCh4eKY

 RewriteEngine On RewriteRule ^page/([^/]*) http://www.example.com/my-php-page.php?cid=$1 [L] 

Результат:

http://www.example.com/my-php-page.php?cid=V1ihnKpip6WpnY7Wm5zn2+6YUtLf2KCh4eKY

без изменения параметра.