No soy un experto en Apache, por lo que no puedo decir si tener 3.000 redireccionamientos en .htaccess es un problema (aunque mi instinto me dice que probablemente sea una mala idea). Sin embargo, como una solución más simple a su problema, ¿por qué no usar mod_rewrite para hacer sus redireccionamientos?
RewriteRule ^/blog/(.+)/(.+)/(.+).html$ http://new.blog.com/$1/$2/$3/ [R=permanent]
Esto usa una expresión regular para que coincida con las URL antiguas y las reescriba a las nuevas. El [R=permanent]
instruye a mod_rewrite para que emita un 301 con la nueva URL en lugar de volver a escribir silenciosamente la solicitud internamente.
En su ejemplo, parece que ha agregado el día de la publicación a la URL, que no existe en la URL anterior. Como obviamente no puedes usar una expresión regular para adivinar el día en que se realizó una publicación arbitraria, es posible que este método no funcione para ti. Si puede eliminar el día de la URL, entonces está listo para comenzar.
Editar: La primera vez que leí su pregunta, me perdí el último párrafo. ("No puedo usar RedirectMatch porque agregué la variable de fecha en mi nueva url.") En este caso, puede usar mod_rewrite's RewriteMap para buscar el componente de día de una publicación.
tiene dos opciones:
- utilizar un HashMap para realizar búsquedas rápidas en un archivo estático. Esto significa que todas las URL anteriores funcionarán, pero no se puede acceder a ninguna publicación nueva utilizando el esquema de URL anterior.
- Use una secuencia de comandos para tomar el día.
En la opción uno, crear un archivo llamado posts.txt y puso:
/yyyy/mm/pppp dd
... para cada puesto donde aaaa es el año de la entrada, mm es el mes, y es pppp el nombre del poste (sin el .html).
Cuando haya terminado, ejecute:
$ httxt2dbm -i posts.txt -o posts.map
luego añadimos a al servidor de configuración del servidor/virtual: (. Tenga en cuenta que el camino es un camino sistema de archivos, no una URL)
RewriteMap postday dbm:/path/to/file/posts.map
RewriteRule ^/blog/(.+)/(.+)/(.+).html$ http://new.blog.com/$1/$2/${postday:$1/$2/$3}/$3/ [R=permanent]
En la opción dos, use pgm:/path/to/script/lookup.whatever
como RewriteMap. Consulte mod_rewrite documentation para obtener más información sobre el uso de un script.
Hacer la búsqueda en mod_rewrite es mejor que simplemente redirigir a un script que busca la fecha y luego redirige al destino final porque you should never redirect more than once. La emisión de un 301 o 302 tiene un costo de ida y vuelta, lo que aumenta la latencia del tiempo de carga de la página.
página 404 -> Redirigir a través de JS. Es lindo y funciona. – Warty
@ItzWarty: Voy a tener que decir que es un consejo terrible. No se puede garantizar que vistor tenga activado JS y que no funcione en absoluto para las arañas de los motores de búsqueda: verán el 404 y supondrán que su contenido simplemente se ha ido. Siempre use códigos de error para decir lo que significa realmente el código. – josh3736