En pocas palabras, quiero tener ambos example.com/aJ5
y example.com/any-other-url
trabajar juntos. Estoy usando Apache y no soy muy bueno escribiendo expresiones regulares.
Ya tengo un global RewriteRule
que envía todo al punto de entrada de la aplicación. Lo que necesito es decirle a Apache if length($path) is <= 5 chars
y 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_URI
es 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 RewriteCond
referencia 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.