Imho, '/' should be used to map a specific resource, like a file or a collection of objects in the database.
URL arguments with '?' and '&' should specify a secondary "meta" mapping for things like sorting or filtering, that still acts on basically the same resource.
That's my opinion, as well. However, what about paginating things? A different page is a different set of the same type of object, so it's basically sorting and filtering, but you're returning different content.
I like the third option because it allows the must functionality to the user if they so desire, but it kind of feels like a violation of the "only sorting and filtering" rule.
Yes, but that can still be a bit complex. I have used https://github.com/chriso/klein.php prior for doing exactly this, but it was a long time ago, the codebase now seems a bit more advanced, and mature.
url routing is one of those things about PHP frameworks I never really understood until I wrote my own. I think if you work with PHP, it's probably something you kind of should know how to do.