Htaccess: reescribe la regla y/o condición para corregir un enlace entrante descontinuado o incorrecto totalmente diferente

StackOverflow https://stackoverflow.com/questions/5844941

Pregunta

Bueno, estoy atrapado de nuevo. Dos días de lectura y nuevamente, encontraron algunas soluciones cercanas, pero nada encaja y todos mis experimentos fallaron.

Esta es una continuación de mi pregunta:aquí en Stackoverflow

Las 4 reglas a continuación toman mis enlaces entrantes:

  http://somedomain.com/getme.pl?dothis=display&partnum=1234567

y lo breve. También permite a los usuarios usar la versión Beatified directamente en la barra de direcciones:

http://somedomain.com/1234567

Aquí están mis reglas de trabajo:

RewriteRule ^([\s]*)$ /getme.pl [L] ## in case there is a space or nothing.
RewriteRule ^([0-9]*)$ /getme.pl?dothis=display&partnum=$1&rewrite [L]
RewriteCond %{QUERY_STRING} partnum=([0-9]*)$
RewriteRule (.*) /%1? [L,R=301]

Funciona muy bien, pero descubrí que hay algunos enlaces antiguos al sitio:

http://somedomain.com/oldversion.php?id=123456789

Y

http://somedomain.com/oldversion.php?r=86this&id=123456789

Me gustaría tomar el ID = [0-9] e integrarla con mis reglas de trabajo. Supongo que la regla se insertaría entre la segunda y la tercera reglas anteriores.

Probé varios intentos (¡alrededor de 100!) Como:

RewriteRule ^(oldversion\.php)?([a-z]{1})=([a-z0-9]*)&([a-z]{2})=([0-9]*)$ /$4? [L]

RewriteRule ^(oldversion\.php)?([a-z]{2})=([0-9]*)$ /$3? [L]

Como puede ver, dos días de lectura y nada se está hundiendo para mí. Probé varias variaciones de las reglas de trabajo que ya tengo también, en vano.

¿No puedo simplemente sacar el 123456789 de las URL .php anticuadas de alguna manera y pegarlo en mis reglas existentes?

Gracias por su ayuda y explicación de mi nivel CO, podría entenderlo ...

¿Fue útil?

Solución

Pon esto al final de su archivo .htaccess:

RewriteCond %{QUERY_STRING} id=([^&]+)(&|$) [NC]
RewriteRule ^oldversion\.php$ /%1? [L,R=301,NC,NE]

Para un uri de /oldversion.php?r=86this&id=123456789 va a redirigir internamente a /123456789

Recuerde que Rewriterule simplemente coincide con su URI y no puede coincidir con su consulta_string.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top