Haga que las URL cortas y largas jueguen juntas en el mismo dominio (RewriteRule)

Haga que las URL cortas y largas jueguen juntas en el mismo dominio (RewriteRule)

En pocas palabras, quiero tener ambos example.com/aJ5y example.com/any-other-urltrabajar juntos. Estoy usando Apache y no soy muy bueno escribiendo expresiones regulares.

Ya tengo un global RewriteRuleque envía todo al punto de entrada de la aplicación. Lo que necesito es decirle a Apache if length($path) is <= 5 charsy luego reescribirlo en otra ubicación.

Sé que puedo usar {1,5}la sintaxis similar en expresiones regulares, pero realmente no sé si es lo que estoy buscando.

Me gustaría implementar esto a nivel de servidor web en lugar de a nivel de php. Se agradece cualquier ayuda.

Respuesta1

Si puedes asumir que el -carácter no se incluirá en URL cortas:

RewriteCond %{REQUEST_URI} ^/([a-zA-Z0-9]){1,5} 
RewriteRule ^ /app-entry-point?url=%1 [L]

Esto no está probado, pero algo como esto debería funcionar. Básicamente, estás pasando una condición si REQUEST_URIes algo así como /abc12, el control cambia al controlador que desees. Omitirá las URL de más de 5 caracteres o que incluyan el carácter "-" o un guión bajo.

%1, la última RewriteCondreferencia retrospectiva, se expandirá a la URL corta. Coloque esto encima de sus otras reglas para hacer cumplir esto primero: con la [L]bandera dejará de reescribir las URL y pasará el control a la aplicación.

Respuesta2

 RewriteCond %{REQUEST_URI}   ^/.{1,5}$
 RewriteRule ...

Esto coincidirá con cualquier solicitud de entre uno y cinco caracteres de longitud y ejecutará la siguiente RewriteRule. Cualquier cosa más larga no ejecutará RewriteRule. La variable REQUEST_URI es lo que el navegador pasó al servidor web. Lo mismo podría manejarse en una sola RewriteRule, pero lo anterior permite el encadenamiento si lo necesita.

 ^/.{1,5}$

^ = Coincide con el inicio de la cadena
/ = Solo coincide con una barra diagonal
. = Coincide con cualquier carácter que no sea una nueva línea
{1,5} = Informa al motor de expresiones regulares que coincida con el carácter anterior de 1 a 5 veces
$ = Coincide con el carácter de fin de línea

La /.{1,5}$construcción le dice al motor de expresiones regulares que coincida con cualquier cadena de tamaño 1-5 que esté inmediatamente seguida por el carácter de fin de línea e inmediatamente precedida por el /carácter.

información relacionada