2009-08-20 38 views
5

Tengo un conjunto de enlaces con #anchors que apuntan a una sola página web y me gustaría moverme sin problemas a un modelo con una página web separada para cada uno de esos enlaces. Quiero que los enlaces antiguos sigan funcionando usando un redireccionamiento.Javascript para redireccionar de #anchor a una página separada

enlace estilo antiguo:

/all_products#A 
/all_products#B 
/all_products#C 

nuevo estilo enlace:

/products/A 
/products/B 
/products/C 

sé que el servidor no recibe el nombre #anchor en la solicitud, pero podría Javascript.

¿Es posible redirigir automáticamente desde/all_products # A a/products/A usando Javascript?

JQuery estaría bien, está siendo utilizado en el sitio de todos modos.

Respuesta

1

espero esto puede ayudar :)

var urlSplit = document.URL.split("#"); 
if (urlSplit[1]) { 
    location.href = "http://www.example.org" + "/" + urlSplit[1]; 
} 
else { 
    location.href = "http://www.example.org"; 
} 
+0

Tenga en cuenta: Existe un problema con el uso de esto dentro de una página "predeterminada" en un directorio para ie8: pierde el valor hash. – Gregory

+0

Debería preferir [este método para extraer el hash] (http://stackoverflow.com/a/10076097/151365) y [este método para redirigir] (http://stackoverflow.com/a/506004/151365) a evitar los problemas indicados en los artículos vinculados.Agregué [una respuesta actualizada que incluye estas mejores prácticas a continuación] (http://stackoverflow.com/a/21198129/151365). – logan

0

esto podría ayudar:

<a href="/all_products#A" onclick="return redirectMe(this);">A</a> 
<a href="/all_products#B" onclick="return redirectMe(this);">B</a> 
<a href="/all_products#C" onclick="return redirectMe(this);">C</a> 
<a href="/all_products#D" onclick="return redirectMe(this);">D</a> 
<a href="/all_products#E" onclick="return redirectMe(this);">E</a> 

<script type="text/javascript"> 
function redirectMe(a){ 
    var aa=a+""; 
    window.location=aa.replace(/#/g,"/"); 
} 
</script> 
+0

voto y sin comentarios? – TheVillageIdiot

+0

Downvote no era mío, pero esto no es lo que necesito. Como la respuesta de Kkyy, esto solo funcionaría para los enlaces en mi propio sitio web, que puedo cambiar al nuevo esquema en cualquier momento que desee. Necesito redirigir enlaces guardados en OTROS sitios web sobre los cuales no tengo control. –

1

con jQuery, ya sea simplemente reemplazar el href con la correcta:

$('a').each(function() { 
    this.href = this.href.replace(/all_products#/, 'products/'); 
}); 

o captura de clics y redirigir:

$('a').click(function() { 
    window.location = this.href.replace(/all_products#/, 'products/'); 
    return false; 
}); 
+1

Pero esto solo funcionaría para los enlaces en mi sitio. No para enlaces existentes de otros sitios. ¿Derecha? –

2

poner esto tan cerca de la parte superior de su HTML <head> como sea posible para que pueda ejecutar antes que el resto de la descarga recursos de página:

<script> 
function checkURL() { 
    var old_path = '/all_products'; 
    if (window.location.pathname != old_path) { 
     // Not on an old-style URL 
     return false; 
    } 
    // Some browsers include the hash character in the anchor, strip it out 
    var product = window.location.hash.replace(/^#(.*)/, '$1'); 
    // Redirect to the new-style URL 
    var new_path = '/products'; 
    window.location = new_path + '/' + product; 
} 
checkURL(); 
</script> 

Esto comprobará la URL de la página actual y redirigir si coincide con la ruta de estilo antiguo.

Este código hace uso del objeto window.location que contiene todas las partes de la URL actual ya divididas en partes componentes.

Hacer que este script sea más genérico se deja como ejercicio para el implementador.

8

Agregué esta nueva respuesta para incluir algunas de las mejores prácticas para extracting the hash from the url y doing a redirect.

// Closure-wrapped for security. 
(function() { 
    var anchorMap = { 
      "A": "/products/A" 
      "B": "/products/B" 
      "C": "/products/C" 
    } 
    /* 
    * Best practice for extracting hashes: 
    * https://stackoverflow.com/a/10076097/151365 
    */ 
    var hash = window.location.hash.substring(1); 
    if (hash) { 
     /* 
     * Best practice for javascript redirects: 
     * https://stackoverflow.com/a/506004/151365 
     */ 
     window.location.replace(anchorMap[hash]); 
    } 
})(); 
Cuestiones relacionadas