2010-05-20 11 views
12

Tengo una situación en la que desee tomar el siguiente URL:Cómo utilizar .htaccess para reescribir URL a html etiqueta de anclaje (#)

/1/John

y tienen que redirigir usando el archivo .htaccess de Apache ir a

/page.php?id=1 & name = john john #

para que vaya a un ancla hTML con el nombre de John.

He encontrado una gran cantidad de referencias para escapar de los caracteres especiales, y para agregar la bandera [NE] para que la redirección ignore el signo #, pero estos no funcionan. Por ejemplo, agregar [NE, R] significa que la URL solo aparece en la dirección del navegador como el original: http://example.com/page.php?id=1&name=john#john.

Respuesta

0

No puede hacer un redireccionamiento interno a un ancla. (Solo piénselo: ¿cómo bajaría Apache al ancla?) Su enlace debería entrar en /1/john#john. Los anclajes no son parte de la solicitud uri.

+0

Estoy verificando esto en la práctica y creo que estás en lo cierto. El navegador interpreta los anclajes y se desplaza al punto correcto en la página; un redireccionamiento de Apache no puede hacer esto porque el URI redirigido no se pasa al navegador. –

2

Lo que quiere hacer, se puede lograr con la reescritura de URL o, más específicamente, el embellecimiento de URL.

I just quickly found this well explained blog post for you, espero que pueda ayudarlo con el learning to rewrite URLs-part.

En cuanto al # -lo que es (esperando que ahora sepa de lo que estoy hablando), no veo problema en pasar la misma variable a la URL reescrita dos veces. Al igual que: (nótese la última parte de la primera línea)

RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$ /$1/$2/#$2 [R] 
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/$ /index.php?page=$1&subpage=$2 

sin embargo, usted tiene que escapar del -parte #, y it seems que se puede hacer de esta manera:

RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$ /$1/$2/\%23$2 [R,NE] 

BTW , La reescritura de URL no es que difícil (pero puede ser complicado, y no soy un experto), pero Google puede ayudar mucho en el camino.

+0

Hola Sune, gracias por la respuesta. Sin embargo, no creo que lo que intento hacer sea posible. Ver respuesta en esta página de nikc. –

4

Se puede hacer de hecho una de estas cosas, pero no ambos.

Puede usar la bandera [NE] para indicar a Apache que no debe escapar del carácter '#', pero para que la redirección funcione, debe especificar una URL absoluta a la que redireccionar, no simplemente una página relativa. Apache no puede desplazarse por la ventana hasta el anclaje por usted. Pero el navegador lo hará, si lo redirige a una URL absoluta.

+1

+1 Tienes razón. El navegador lo hará. –

+1

Para el póster original: indique una respuesta correcta para resolver esto. –

+0

Hmm .. con Apache 2.4.25, estoy especificando una página relativa y obtengo un redireccionamiento externo a una etiqueta de anclaje. Tal vez las cosas han cambiado desde 2013? En una sección , 'RewriteBase"/"' then 'RewriteRule^services /? $ #services [L, R = 301, NE]' funciona para mí. Lo cual es bueno si no tengo que volver a hacer las reglas al convertir a https. –

Cuestiones relacionadas