%N backreference inside RewriteCond %N backreference inside RewriteCond apache apache

%N backreference inside RewriteCond


There's 2 things that you are doing wrong here.

First, your %{HTTP_HOST} regex is no good. You need to escape the . dots otherwise they'll be treated as "any character that's not a newline". This essentially makes the %3 backreference the last character of the hostname before the TLD (e.g. http://blah.bar.loc, %3 = r).

Second, you can't use backreferences in the regex of a RewriteCond, only the left side string, it's sort of a weird limitation. However, you can use the \1 references, in the regex so that you can construct a clever left side string to match against. Something like %3::%{REQUEST_URI} and then you can match like this: !^(.*?)::/\1/?. This regex essentially says: "match and group the first block of text before the ::, then make sure the block of text following the :: starts with /(first block)".

So your rules should look like this:

RewriteEngine OnRewriteCond %{HTTP_HOST} ^(www\.)?([a-zA-Z0-9-]*\.)?([a-zA-Z0-9-]+)\.loc$ [NC]RewriteCond %3::%{REQUEST_URI} !^(.*?)::/\1/?RewriteRule (.*) /%3/$1 [L,QSA]