it-swarm-es.com

Cambio de la estructura del enlace permanente: las redirecciones en htaccess rompen los enlaces del archivo

Cuando comencé con mi blog, los enlaces permanentes y la siguiente estructura:

http://<domain>/%year%/%monthnum%/%day%/%postname%/

Hace algún tiempo, cambié la estructura del enlace permanente a "http://<domain>/%postname%/" solamente.

Para abordar los enlaces externos a la antigua estructura de enlace permanente, agregué la siguiente línea en mi archivo htaccess:

RedirectMatch 301 /([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ http://<domain>/$4

Ahora el problema es que la línea de redireccionamiento rompe los enlaces del archivo, por ejemplo. "http://<domain>/2010/09/02" se redirige a la página principal en lugar de mostrar las publicaciones del 2 de septiembre de 2010.

¿Es posible corregir la directiva de redireccionamiento en htaccess, o no voy a poder comer la torta y tenerla también?

2
TFM

RedirectMatch de Mod_Alias ​​no es tan poderoso como Mod_Rewrite. Si tiene Mod_Rewrite en su Host (por ejemplo, Pretty Permalinks lo utiliza), podría hacer la redirección solo si la URL no está en el formato de enlace de Archivo.

Para probar ese caso, hay RewriteCond y para realizar el comando de redireccionamiento, hay RewriteRule ... [R=301] Directiva.

Un ejemplo basado en sus datos:

RewriteCond %{REQUEST_URI} !^/((20|19)[0-9]{2})/([0-9]{2})/[0-9]{2}$ [NC]
RewriteRule ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ http://<domain>/$4 [R=301,L]

Esto no está probado, pero creo que debería hacer el trabajo. He usado el cuantificador ({2}) para especificar mejor cuántos números espera. Además de eso, en el RewriteCond he creado un patrón que solo coincide con los 20 y 19 años.

La primera línea (la condición, RewriteCond) comprueba que no coincida con una URL de archivo y solo si no coincide, se ejecutará la regla para hacer la redirección. La RewriteRule básicamente hace lo mismo que su directiva RedirectMatch.

2
hakre