2010-08-27 20 views
11

La pregunta es bastante simple, pero no he podido encontrar una respuesta durante horas.necesita escapar el carácter # (hash/pound) en la regla de reescritura de .htaccess

Lo que tiene que hacer es:

RewriteRule ([^#])#(.*) $1\%23$2 

que básicamente significa que quiero url escapar del signo numeral maldito el que me viene de un codepiece externa.

barra diagonal inversa (\) no funciona para escapar de este signo ... y por favor no sugiera usar %23 en su lugar # porque no funciona tan bien.

(%2 3 no coincida con un # porque simplemente no es == %23)

Respuesta

7

La parte de hash de una dirección URL no está disponible para volver a escribir. Cuando un navegador web envía una solicitud de URL a un servidor web, envía todo hasta el signo hash. El hash solo está disponible en el cliente (por ejemplo, el código JavaScript puede verlo).

+0

esto no es una forma de escapar #, pero aparentemente en mi caso no importa. así que no puedo seguir y establecer este como aceptado. gracias – kali

+2

Si bien es cierto que la parte posterior al # no estará disponible en la URL de la solicitud, puede tenerlo como parte de la URL de redireccionamiento. Solo tiene que escapar utilizando la opción NE, que se menciona en otra respuesta. –

+1

@PeterDolberg @Keith La pregunta es sobre la coincidencia de un '#' en el patrón. La otra respuesta puede ayudar a las personas que encuentran esta pregunta en Google, pero no es una respuesta válida a esta pregunta en particular. 'NE' no es relevante aquí, y mi respuesta no es" totalmente errónea ". –

-2

.htaccess

RewriteRule old\.php redirect.php?url=http://example.com/new.php|hash [R=301,QSA,L] 

redirect.php

<?php 
    $new_url = str_replace("|", "#", $_GET['url']); 
    header("Location: ".$new_url, 301); 
    die; 
?> 
23

yo acabamos de este trabajo para un sitio después de un par de mensajes en este foro, estoy usando una regla de reescritura con NE no escapar y R = 301 redirigir opciones:

RewriteRule ^galleries/([a-zA-Z0-9_-]+)$ /gallery.html#/$1 [R=301,NE,L] 

Esto redirecciona todos galerías/variables a /gallery.html#/variable

Editar: la parte importante de la regla es NE, que indica al servidor que analizan la salida sin escapar caracteres. Sin esto, intentará escapar del # en la regla de reescritura, que es lo que el OP está preguntando.

+1

explique en lugar de solo dar un ejemplo – johannes

+4

Si bien esta respuesta contiene información útil, _no_ parece_relacionarse con la pregunta del OP como se sugiere. El OP está intentando hacer coincidir un '#' en RewriteRule _pattern_, mientras que la respuesta anterior está usando un '#' (identificador de fragmento) en RewriteRule _substitution_. Esto es bastante diferente. – MrWhite

+0

@ w3dk, el OP dice: "Quiero escapar de la url el maldito signo hash". Haces esto con NE. – Dave

Cuestiones relacionadas