Oh, you are also targeting scriptless serving (webserver-only) operation. Very nice!
I think apache can serve files with question marks in the name, if you create the file cache in the webroot.
I experimented with scriptless serving using the Zena CMS. That CMS keeps the cache in the webroot. For sites that do only change occasionally (when edited), I could perfectly limit the loading of the application to non existing files.
For full support of scriptless serving, the CMS would have to warm the cache with pages (files) as well as symlinks or redirects to the content repository files where it makes sense, and schedule cache expiration events (cron, runwhen, or own daemon process).
When I experimented with manual deleting of cached files after the occasional update, I found it is important to expire the cache only selectively, because apaches browser cache management seems to work based on file modification date. When I deleted too much, the identically recreated files were transfered again instead of just confirming the browser cache.
Another aspect of scriptless serving is the format and language selection. Apache supports this by its “mulitviews” completion.
Automaitic completion works nicely for URIs that end in: .format.language-code
The automatic completion may be disabled in the .htaccess for URIs starting with special language code directories ( /en/, /de/ etc.). See http://www.fellerich.lu/articles/multiviews for “multilingual site without PHP”.
Overall pattern:
domain.tld/{optional lang code}/path/filename{~optional timestamp}.{auto completed format}.{autocompleted lang}?{timestamp}
The CMS defaults to render the links without the optional and autocompleted parts, but the user may also choose to link to a specific version in the asset list content element.
Edit: Maybe the final ?{timestamp} isn’t even necessary these days any more, if there is a (http header?) mechanism by with browser and apache can coordinate their cache/refresh operation.