I was just reading something about Django and it reminded me about something both Django and Rails do with routes - have the concept of "named" routes. So say your /product/:id => product.view?id=:id route has a name "product_view", then you could do buildUrl(route=product_view, queryString="id=1") - it's now explicit which route buildUrl refers to. Rails at least auto-generates
I guess that doesn't solve the problem of making it transparent though - if you always refer to the action you don't care if routes are "on" or "off", but if you start using names you HAVE to be using routing, but it does solve the problem of ambiguous mapping from action/params to route.
Also what those other platforms actually do is actually give you a helper for the url and path - so for the product_view route you could do in your view <a href="#product_view_path(1)#">View Product</a> rather than using buildUrl.
So you can see how this looks in practice, here is the routing table from a rails app I am currently working on (you can always generate this for a rails app with "rake routes"):
Just throwing the thoughts out there, not suggesting this is the right way to go.