Есть 2 вещи, которые вы делаете неправильно здесь.
Во-первых, ваше регулярное выражение %{HTTP_HOST}
не подходит. Вам нужно избегать точек .
, иначе они будут рассматриваться как «любой символ, который не является символом новой строки». Это по существу делает обратную ссылку %3
последним символом имени хоста перед TLD (например, http://blah.bar.loc
,% 3 = r
).
Во-вторых, вы не можете использовать обратные ссылки в регулярном выражении RewriteCond
, только в левой стороне, это своего рода странное ограничение. Однако вы можете использовать ссылки \1
в регулярном выражении, чтобы вы могли построить умную левую боковую строку для сопоставления. Что-то вроде %3::%{REQUEST_URI}
, а затем вы можете так: !^(.*?)::/\1/?
. Это регулярное выражение, по существу, говорит: «сопоставьте и сгруппируйте первый блок текста перед :: :: затем убедитесь, что блок текста, следующий за :: начинается с /(first block)
".
Итак, ваши правила должны выглядеть так:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?([a-zA-Z0-9-]*\.)?([a-zA-Z0-9-]+)\.loc$ [NC]
RewriteCond %3::%{REQUEST_URI} !^(.*?)::/\1/?
RewriteRule (.*) /%3/$1 [L,QSA]