Htaccess: reescribe la regla y/o condición para corregir un enlace entrante descontinuado o incorrecto totalmente diferente
-
27-10-2019 - |
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 ...
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.