Redirección de acortador de URL casera en conflicto con redireccionamientos 301

11

Tengo un sitio web que se creó originalmente con ASP clásico. Hace aproximadamente un año se reescribió en PHP. Esto hizo que las extensiones de archivo cambiaran y algunas páginas se movieron a nuevas ubicaciones dentro del sitio web. Naturalmente, realizamos redireccionamientos 301 de las URL antiguas a las nuevas URL para que sus usuarios y motores de búsqueda pudieran encontrar sus nuevas ubicaciones. Esto funciona bien

También creamos una herramienta que permite al propietario del sitio crear sus propias URL pequeñas que redirigirán a una página con las variables de seguimiento de campañas de Google Analytics incluidas en la URL para que puedan realizar un seguimiento de la campaña y ver cómo funciona.

El problema que tengo es que las reglas de seguimiento de campañas entran en conflicto con las redirecciones 301 y evitan que las redirecciones funcionen.

Aquí está el código de seguimiento de la campaña:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]

Como puede ver, verifica si existe un archivo y, si no es así, redirige a un script de seguimiento (tracking.php) que luego toma el código de seguimiento y lo redirige a la URL correcta con el código de campaña de Google Analytics en la consulta cuerda.

Ese código hace que las reglas como esta fallen:

redirect 301 /about.asp /about.php
redirect 301 /capabilities.asp /capabilities.php
redirect 301 /capacitors.asp /capacitors.php

Tiene sentido que esto no funcione en conjunto, como dicen las reglas de seguimiento, "si no se encuentra un archivo, redirija a tracking.php". Lo que necesito es que los redireccionamientos 301 se ejecuten primero, y si ninguno de ellos coincide, redirige al script de seguimiento. Colocar las reglas de seguimiento debajo de las redirecciones 301 no cambia los resultados.

¿Se puede hacer esto a través de .htaccess? ¿O tendré que modificar la secuencia de comandos de seguimiento para que, si no se encuentra una campaña, verifique si el ID de la campaña es realmente una página antigua que necesita ser redirigida y luego redirige el 301 desde allí?

John Conde
fuente

Respuestas:

5

Intenta convertir tus mod_aliasredireccionamientos en mod_rewritedirectivas.


Editar: El siguiente ejemplo supone que ha reemplazado los archivos ASP antiguos con archivos PHP bajo la misma ruta.

RewriteEngine on

# *.asp -> *.php
RewriteRule (.*)\.asp$ /$1.php [R=301,L]

# tracking script
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]

... o puede omitir la variable de expresión regular y establecer una redirección explícita para cada uno de los URI antiguos:

RewriteRule about\.asp$ /about.php [R=301,L]
RewriteRule capabilities\.asp$ /capabilities.php [R=301,L]
RewriteRule capacitors\.asp$ /capacitors.php [R=301,L]

Editar # 2: Aquí hay un ejemplo que debería cubrir la mayoría de las situaciones que encontrará:

RewriteEngine on

# Changes to path + Query String Append
RewriteRule ^/path/to/old\.asp$ /path/to/new/about.php [R=301,L,QSA]

# *.asp -> *.php + Query String Append
RewriteRule ^(.*)\.asp$ $1.php [R=301,L,QSA]

# tracking script
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]
danlefree
fuente
No estoy seguro de lo que quieres decir. ¿Puedes dar un ejemplo basado en lo que he mostrado en mi pregunta?
John Conde
Gracias por la edición Tiene sentido ahora. Supongo que mi último problema sería qué hacer con los archivos cuyas rutas han cambiado. ¿Es eso posible? ¿O estoy pidiendo demasiado?
John Conde
Puede establecer redireccionamientos explícitos para esos archivos (si la mayoría de las rutas han cambiado, también puede utilizar redireccionamientos explícitos para todos los archivos para garantizar que la configuración sea mantenible).
danlefree
Sospecho que no tener el [R=301,L]después de cada redirección es lo que está causando mi problema. Déjame intentarlo y te diré lo que sucede.
John Conde
El *.asp -> *.phpcomodín funciona muy bien. Las reglas individuales para las páginas que no son una transición directa y tienen cadenas de consulta son problemáticas. Pero este parece ser el camino correcto. Si no puedo resolver esa parte, comenzaré una nueva pregunta al respecto.
John Conde
-1

Revertiría la redirección y la dejaría como estaba originalmente. Redireccione su NUEVO sitio a su antiguo sitio. Su sitio VIEJO probablemente ya se esté beneficiando de los vínculos de retroceso, la antigüedad del sitio web y el SEO. Sería una pena perder eso solo para reemplazarlo con un sitio más nuevo con un rango de página más bajo. Google castiga las redirecciones. Su NUEVO sitio todavía no tendrá SEO, así que es mejor usar una redirección en ese :)

Brian McCarthy
fuente
No creo que regresar sea una buena solución. El sitio original estaba mal hecho en casi todos los sentidos. Hicimos el sitio más rápido, más utilizable, accesible, organizado y mantenible. No perderán nada de los redireccionamientos porque es un sitio de nicho y tenía pocos enlaces para comenzar y la mayoría fue a la página de inicio que no requiere un redireccionamiento. Por lo tanto, definitivamente no queremos volver al sitio anterior, ya que no ganamos nada y perdemos mucho.
John Conde
Para su información, Google no castiga las redirecciones. El único problema que tienen los redireccionamientos es que si están encadenados demasiado profundamente, dejan de seguirlos y se pierde algo de PR al hacer un 301, pero la cantidad es trivial y vale la pena en comparación con las alternativas de no hacerlo en absoluto.
John Conde