.htaccess url cadena codificada que no pasa a la página correctamente

Tengo una regla de reescritura en .htaccess

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

Estoy pasando una cadena codificada que contiene caracteres como = y + – esta es la cadena codificada;

V1ihnKpip6WpnY7Wm5zn2+6YUtLf2KCh4eKY

Cuando en la URL completa es

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

ahora esto no funciona debido al signo + . Entonces quiero enviar el cid urlencoded que luego se convierte;

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

El signo + convierte en %2B . Esto funciona muy bien, excepto cuando bash esto a través de RewriteRule en .htaccess, no funciona. Entonces la URL sería

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

El archivo mypage.php en realidad recibe el cid como V1ihnKpip6WpnY7Wm5zn2 6YUtLf2KCh4eKY por alguna razón reemplazando %2B con un espacio en blanco.

¿Alguna idea de por qué puede estar haciendo eso? ¿Y cómo puedo solucionarlo? Muchas gracias por la ayuda.

EDITAR

Acabo de encontrar esta solución – PHP $ _GET var con urlencode y “&” error – pero me preguntaba si había una solución más elegante en .htaccess que tener que urlencode la cadena dos veces.

Intente agregar el indicador B reescritura. Esta bandera le dice a mod_rewrite que escape a las referencias, la documentación dice esto :

_rewrite tiene que deshacer las URL antes de mapearlas, por lo que las referencias se guardarán en el momento en que se apliquen. Usando el indicador B, se escaparán los caracteres no alfanuméricos en las referencias retrospectivas.

Dado que el carácter % está reservado para las referencias retrospectivas a agrupaciones que coinciden en RewriteCond instrucciones RewriteCond que preceden a RewriteRule , mod_rewrite las trata de manera diferente y podría terminar intentando reemplazar el %2 con una retro referencia en blanco.

Entonces tu regla debería verse así:

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

Si entendí bien, redireccionar esta URL:

http://www.example.com/page/V1ihnKpip6WpnY7Wm5zn2+6YUtLf2KCh4eKY a este

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] 

El resultado es:

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

sin cambios en el parámetro