Validar el camino de una url

Estoy tratando de validar una URL sin dominio, solo la ruta y los parámetros.

La expresión regular que estoy usando hace la mayor parte del trabajo, pero tiene algunos errores que no sé cómo prevenir (soy bastante noob con regexp):

/^(\/([\w#!:.?+=&%@!\-\/])+)$/i

El siguiente ejemplo está correctamente validado.

/asd.jsp -> true
/asd/asd.jsp -> true
/asd/asd.jsp?bar=baz&inga=42&quux -> true
/asd/asd.jsp?bar=ba z&inga=42&quux -> false

Pero estos no son correctos y me dan la verdad también:

/asd/asd./jsp -> true :(
/asd/asd.jsp/ -> true :(
/asd./asd.jsp -> true :(
/asd///asd.jsp -> true :(
/asd/asd.jsp&bar=baz?inga=42?quux -> true :(

¿Recomiendas usar una función en lugar de una expresión regular?

¡Muchisimas gracias!

Respuestas a la pregunta(2)

Su respuesta a la pregunta