Looking at the code I'm proposing to have this on vibed as a general url rewrite hook:
/// URLRewriter request handler
alias HTTPServerURLRewriter = void function(HTTPServerRequest req);
...
interface HTTPRouter : HTTPServerRequestHandler {
@property string prefix() const;
@property HTTPServerURLRewriter url_rewriter(); //<<<< new
@property void url_rewriter(HTTPServerURLRewriter cb); // <<<< new
...
final class URLRouter : HTTPRouter {
private {
version (VibeRouterTreeMatch) MatchTree!Route m_routes;
else Route[] m_routes;
string m_prefix;
HTTPServerURLRewriter m_url_rewriter;
}
...
@property string prefix() const { return m_prefix; }
@property void url_rewriter(HTTPServerURLRewriter cb) { m_url_rewriter = cb; }
@property HTTPServerURLRewriter url_rewriter() { return m_url_rewriter; }
...
void handleRequest(HTTPServerRequest req, HTTPServerResponse res)
{
if(m_url_rewriter !is null)
{
m_url_rewriter(req);
}
auto method = req.method;
static void url_rewriter(HTTPServerRequest req)
{
const string prefix = "/internal";
if( req.path.indexOf(prefix) == 0 )
{
req.path = req.path[prefix.length..$];
}
}
...
auto router = new URLRouter;
router.url_rewriter = &url_rewriter;