¿Mis enlaces permanentes están rotos? ¿Puedo usar mod_rewrite para ignorar un archivo físico?
Un sitio web en el que trabajo recientemente publicó un archivo en la raíz del sitio llamado "2011.html". Ahora, cualquier publicación de blog de 2011 con la estructura de enlace permanente año/mes/día/nombre-de-la-publicación no funciona, y en su lugar carga el archivo 2011.html. Al intentar acceder al archivo en dominio.com/2011/ también carga incorrectamente el archivo. Los años 2010 y otros funcionan como se espera.
¿Hay alguna manera de usar mod_rewrite para que solo reconozca este archivo cuando 2011.html está explícitamente en la URL, y use la estructura estándar de enlaces permanentes con cualquier otra URL para restaurar la funcionalidad del blog?
El enlace a este archivo se envió en un correo de marketing y está recibiendo mucha actividad, por lo que no se puede mover ni renombrar.

La razón por la que esto sucede es debido a la negociación de contenido. Normalmente, /2011.html
no sería accesible a través de /2011/
, pero la negociación de contenido hace que Apache busque automáticamente archivos llamados 2011
(sin importar la extensión) cuando no puede encontrar la carpeta antes de pasar el control a WordPress.
Esto puede ser bastante útil, pero si no necesitas especialmente la negociación de contenido (WordPress en sí no la necesita), puedes desactivarla agregando esto a tu .htaccess
:
Options -MultiViews
Si eso no funciona, o si necesitas la negociación de contenido, podrías renombrar el archivo 2011.html
a algo diferente y usar mod_rewrite para asegurarte de que el enlace siga funcionando. Por ejemplo, renombra 2011.html
a happynewyear.html
y luego agrega esto a tu .htaccess
(antes de las otras RewriteRules):
RewriteRule ^2011\.html happynewyear.html [L]

Sí, este es exactamente el tipo de cosas para las que fue diseñado mod_rewrite. Sin embargo, necesitarás mover el contenido del blog a otra ubicación.
Por ejemplo, si /2011/11/1/como-hacer-cerveza.html era uno de los artículos del blog, ya no está accesible allí porque ahora es un enlace roto. Así que tendrás que moverlo a otro lugar:
/2011_bueno/11/1/como-hacer-cerveza.html
Tu regla de reescritura necesitará coincidir con cualquier cosa que comience con /2011/.* y reescribirla a la URL que publiqué arriba, asumiendo que esa es la ubicación a la que se han movido los artículos.
Mover el contenido podría resultar mucho trabajo. En realidad, creo que es mucho mejor simplemente mover el archivo 2011.html a otro lugar y luego usar una regla de reescritura para él, ya que es solo un archivo en lugar de toda la información histórica.
Por supuesto, apenas llevamos 7 días en 2011 en este momento, así que no puedo imaginar que haya tantas publicaciones para migrar de 2011 :)
