I’m trying to redirect any requests where the path does not start with /server/ followed by a major + minor version number, e.g., /server/10.2/, but not having much success. I’ve attempted to use the following rewrite block.
rewrite {
r ^/server/(?![\d]{2}\.[\d]{1})(.*)
to /server/10.2{1}
}
However, requests fails with error parsing regexp: invalid or unsupported Perl syntax: (?!`. From reading through the Caddy Server rewrite source, I see that it’s using regexp, which doesn’t support negative or positive lookbehinds and lookaheads.
Is there any other way to achieve the same affect?
Well, rewrite also supports if subdirectives. Logically, the set of if conditionals, an ext conditional if given, and regex expressions must ALL match for a rewrite to execute.
I have to admit I’m a little confused as to what you want to achieve. I think you require it to start with /server, but only if it doesn’t have the versioning after it.
# Use path scoped rewrite to avoid running
# multiple regexes on every single request
rewrite /server {
# Don't match '/server/10.2'-alike versioning
if {path} not_matches ^/server/\d{2}\.\d{1}
# Insert 10.2 element
r ^/server{.*}$
to /server/10.2{1}
}
@Whitestrake, sorry if I wasn’t as clear as I intended to be when describing my situation. From reading through the code sample that you provided, I believe that it should be the correct solution to my problem. Thanks for your feedback.