2010-08-04 3 views
4

J'ai vu un certain nombre d'exemples du contraire, mais je suis à la recherche d'aller d'une URL ancre/hachage à une URL non-ancrage, comme ceci:Comment détecter et rediriger depuis une URL avec une ancre Utilisation de mod_rewrite/htaccess?

From: http://old.swfaddress-site.com/#/page/name 
To: http://new.html-site.com/page/name 

Aucun des exemples à http://karoshiethos.com/2008/07/25/handling-urlencoded-swfaddress-links-with-mod_rewrite/ ont fonctionné pour moi. Il semble que REQUEST_URI a le /#/stuff, mais ni moi ni mon Apache (2.0.54) ne le voyons.

Des idées, des expériences passées ou des réussites?

+0

Cette page parle de contourner un bogue dans les produits Apple où le '#' est mal codé et est donc transmis accidentellement au serveur. Normalement, comme le dit Wrikken, cela n'arrive pas, donc vous ne pouvez pas lire le fragment. – bobince

Répondre

12

Tout ce qui suit # est un fragment, et ne sera pas être envoyé au serveur Web. Vous ne pouvez pas le capturer à un moment donné, vous devrez utiliser une approche côté client pour capturer ceux-ci.

1

Je suis l'auteur de l'article auquel vous avez un lien. Wrikken est correct, le contenu après l'ancre nommée n'est pas envoyé au serveur, à moins que quelque chose n'affecte l'URL en cours de route. Du côté client, vous avez besoin de JavaScript comme ceci dans votre page de destination pour rediriger les liens SWFAddress vers des URL correspondant sur un autre domaine:

var re = new RegExp('#(.*)'); 
var redirectFragment = re.exec(document.location.toString()); 
if (redirectFragment!=null) 
{ 
    document.location = 'http://new.html-site.com'+redirectFragment[1]; 
} 
2

@RobRuchte: ne serait-il pas préférable d'utiliser window.location.hash, avec un REPLACE au lieu d'une expression régulière?

var redirectFragment = window.location.hash.replace(/^#/,''); 
if ('' !== redirectFragment) { 
    window.location = 'http://new.html-site.com' + redirectFragment; 
} 
0

J'ai utilisé une version modifiée de la réponse par @ m14t. Cela fonctionne pour les redirections qui ressemblent à http://example.com/path/to/page#fragment->http://example.com/path/to/page/fragment. Notez que j'ai également concaténé le window.location.pathname pour la redirection, sinon je n'aurais pas le chemin complet pour la redirection. Si le nouveau chemin de fichier est complètement différent de l'ancien, cela ne fonctionnera pas.

var redirectFragment = window.location.hash.replace(/#/,'/'); 
if ('' !== redirectFragment) { 
    window.location = 'http://example.com' + window.location.pathname + redirectFragment; 
} 

Dans mon cas, je devais créer des liens fragmentés dans des pages individuelles, qui fait partie de ce qui se fait couramment pour améliorer le référencement d'un site Web.

Questions connexes