2010-11-04 24 views
9

He decidido cambiar todas mis páginas /dyanmic.php?UID=... a /static/Name-From-DB. He leído que la mejor manera de hacer la redirección, SEO sabio, es implementar una redirección 301 Htacess:htaccess redirect vs php redirect

(http://www.tamingthebeast.net) - La manera correcta - un .htaccess 301 Redirigir: una redirección 301 es la estrategia más eficiente para y fácil de usar araña/visitante para sitios web que están alojados en servidores que ejecutan Apache.

Sin embargo, ya que tengo miles de páginas que tenga que utilizar la redirección de, parece bastante ineficiente tener miles de entradas en el archivo Htacess:

redirect 301 /dynamid.php?UID=1 http://www.domain.com/static/Name-From-DB 
redirect 301 /dynamid.php?UID=2 http://www.domain.com/static/Another-Name-From-DB 
and so on... 

Por lo tanto, parece que la manera eficiente de hacerlo es a través de la página PHP, indicando en la cabecera de redirección 301 de acuerdo con el UID:

<? 
Header("HTTP/1.1 301 Moved Permanently"); 
// Getting the page static name from the DB according to the UID 
$result = mysql_query('SELECT Name FROM DB WHERE UID='$_GET["uid"]''); 
$row=mysql_fetch_assoc($result); 
// Redirect to the new page 
Header("Location: http://www.domain.com/static/" . $row[0]); 
?> 

Mi pregunta es si este método afectará de forma negativa en las clasificaciones de mis páginas, teniendo en cuenta la paragr aph, cité arriba que la mejor manera de hacer una redirección es a través del .htaccess.

Gracias!

+10

su código php de muestra no es seguro. ¡Yo tengo un error de inyección sql! tienes que escapar $ _GET ["uid"]! –

Respuesta

9

Los mismos encabezados se enviarán de la misma forma que usted lo haga. Por lo tanto, para el usuario (o para un motor de búsqueda) no será diferente, por lo que el PHP no afectará negativamente el rango de su página en comparación con .htaccess.

La forma de PHP será un poco más lenta ya que cada vez que se accede a la página se activa una consulta de base de datos. Si el sitio no tiene demasiado tráfico yendo a esas páginas, no debería ser un problema.

En su página PHP, primero haga la conexión de la base de datos porque si la página no existe, querrá redirigirlos a otra página o pasar los encabezados de error 404 en lugar del encabezado 301.

2

No. El cliente ve lo mismo en ambos casos: una redirección 301. La única diferencia podría ser la demora, ya que el .htaccess se procesa antes que el archivo php, y la consulta sql puede agregar algo de retraso, pero creo que la demora es insignificante.

3

Mi pregunta es si este método tendrá un efecto negativo en el ranking de mis páginas, teniendo en cuenta el párrafo que mencioné anteriormente que la mejor manera de hacer una redirección es a través del .htaccess.

Sin, no habrá proporcionado que implemente la redirección correctamente en el archivo PHP! Es decir, que probablemente debería buscar el Name (por uid) antes de la emisión de la cabecera 301 (y única la edición de esta cuando un Name se encuentra — lo demás es un 404).

Además, ¿por qué no ejecuta una consulta en su base de datos, muestra los redireccionamientos en formato .htaccess y lo escribe directamente en el archivo .htaccess?De esta manera tendrá que hacerlo solo una vez y no tendrá que preocuparse por los uid's no existentes.


Editar — pseudocódigo

str ← "" 
for each (uid, Name) in database: 
    line ← concat("Redirect 301 /dynamid.php?UID=", uid, "http://www.domain.com/static/", Name, <newline>) 
    append line to str 
copy or write str to .htaccess 

Al hacer esto, usted todavía será capaz de encontrar los redireccionamientos en un año (están todos en .htaccess) y ya no hay una necesidad de hacer una búsqueda en la base de datos en cada solicitud de "estilo antiguo".

+0

Primero, gracias por la respuesta. El único inconveniente que vi de esta manera es que eventualmente, con el tiempo, creo que la mayoría de los visitantes llegarán a la página/static/y no a /dynamic.php. Por lo tanto, creo que incluir 3000+ Reidrection en el archivo .htaccess será un gasto general, ya que la mayoría de los visitantes llegarán a/static/y not/dynamic, pero igual tendrán que pasar por las más de 3000 líneas del .htaccess para ver si coincide con cualquier regla de redirección. ¿Tal vez yo estoy equivocado? – Joel

+0

@Joel Sí, en ese caso, la solución dinámica de PHP es probablemente más fácil de mantener y menos intensiva en recursos a largo plazo. Solo recuerde implementar la redirección correctamente. – jensgram

1

No afectará a su ranking de páginas: Google aprecia cuando les dice que sus páginas se han movido y que no mantendrá su sitio con contenido duplicado.

Pero como se dice en otras respuestas, el encabezado es el mismo si lo envía desde PHP o Apache: su enfoque debe ser cómo minimizar su trabajo; tanto ahora como en el futuro.

Al tipear manualmente la redirección en .htaccess, en realidad se necesita más trabajo que el necesario al comparar dinámicamente la adición de encabezados a través de su PHP cuando sea necesario.

0

... la mejor manera de hacer un cambio de dirección es a través del .htaccess ...

Si usted está en un servidor compartido, que puede ser el caso, pero, en referencia a una larga o incluso una breve lista de archivos, ese archivo .htaccess se buscará con cada acceso de archivo dentro de su página - Todos los gráficos, todos los archivos incluidos, etc.

No solo eso, sino, si usted es algunos niveles profundos, comprueba si hay archivos .htaccess en todos los directorios principales. Por lo tanto, si el archivo está en casa/dir1/directorio2/dir3, que va a comprobar si hay archivos .htaccess en cada directorio con cada acceso de archivo:
casa/dir1/directorio2/dir3/
casa/dir1/directorio2/
inicio/dir1/
inicio/

Mejor mantenerlo lo más ligero posible. Si no está en un servidor compartido, no debe usar archivos .htaccess. Ingrese las directivas en el archivo de configuración principal, en Directorio, y establezca AllowOverride en "none".