2009-08-18 9 views
6

Je dois prendre les URL entrantes standard et réécrire les rediriger pour cibler des ancres spécifiques sur une seule page (le nom de la page html entrante devient le nom de l'ancre). Par exemple, la règle serait comme ceci:Comment rediriger vers une URL contenant une ancre (#)?

RewriteRule ^files/([a-zA-Z0-9\-_]+)\.html$ /test.html#$1 [R] 

Alors cette url:

http://foo.com/files/bar.html 

... deviendrait:

http://foo.com/test.html#bar 

La règle elle-même fonctionne très bien, mais le caractère # est codé dans la barre d'adresse du navigateur à:

http://foo.com/test.html%23bar 

qui bien sûr ne fonctionne pas correctement comme une ancre. Y a-t-il un moyen dans .htaccess de le forcer à ne pas encoder le hachage? J'ai également essayé d'échapper comme \# mais cela ne fait aucune différence.

Répondre

9

Essayez le noescape (NE) drapeau dans la règle:

RewriteRule ^files/([a-zA-Z0-9\-_]+)\.html$ /test.html#$1 [NE, R] 
+0

Impressionnant, merci. Je me suis dit que ça devait être quelque chose de simple, mais Google ne me montrait pas le chemin;) –

5

Utilisez NE ou Aucun drapeau Escape:

RewriteRule ^files/([a-zA-Z0-9\-_]+)\.html$ /test.html#$1 [NE,R]

+3

Pat m'a battu de 57 secondes;) Dites au monde que l'avertissement de «nouvelles réponses» de SO est plus long que ça! – inerte

+1

Victoire pour Pat! :) – Pat

+1

+1 pour le "perdant" car son code est un octet plus court :-) – Olaf

Questions connexes