2011-05-20 12 views
6

Estoy tratando de hacer una URL amigable a través de RewriteRule pero sigue ignorando # como parte del valor de la variable.
La línea de .htaccess es tan simple como estoRewriteRule y el signo de número "#"

RewriteRule ^key/(.+)/$ index.php?key=$1 

y la dirección URL solicitada es

http://www.example.com/key/c%23/ 

pero yo sólo estoy poniendo c como obtener la variable y no c%23.

¿Qué estoy haciendo exactamente mal?

Respuesta

4

Finalmente, después de algunas excavaciones, logré lograr esto.

que sólo necesita la bandera B en RewriteRule para escapar caracteres no alfanuméricos, como #

RewriteRule ^key/(.+)/$ index.php?key=$1 [B]
+0

En el momento en que una solicitud llega a modificar un carácter # normalmente deberá haberse convertido a% 23. Sin embargo, la opción [B] es la opción correcta de usar para que el% 23 se reescriba correctamente. – John

0

%23 es un símbolo hash (#), por lo que (en realidad no se analiza nada) mod_rewrite. La URL real por lo tanto es http://www.foo.com/key/c, sin ningún %23. Sin embargo, otros códigos de tablero funcionan bien.

0

%23 es una marca hash (#). Supongo que el navegador interpreta el hash como ancla y no lo transmite al servidor. Por ejemplo, si usas http://www.foo.com/key/c%20/ obtendrás "c [espacio]".

+1

pero ¿cómo puedo evitar que la interpretación y el uso de '23'% al igual que lo hace el desbordamiento de pila? (http://stackoverflow.com/questions/tagged/c%23) – GRaecuS

Cuestiones relacionadas