Итак, я делаю mod_rewrite, и я нахожусь в ситуации, когда мне нужно сопоставить любой субдомен, кроме одного. Это выглядит так.
RewriteCond %{HTTP_HOST} ^([^\.]+)\.example\.com$ [NC]
Так что это соответствует и захватывает один поддомен, без точек. Но допустим, я не хочу сопоставлять субдомен с именем «собака». Я пытался сделать это с негативным взглядом вперед, вот так.
RewriteCond %{HTTP_HOST} ^((?!dog)[^\.]+)\.example\.com$ [NC]
Это работает, по большей части. dog.example.com больше не совпадает, и это хорошо. Однако doggies.example.com также больше не соответствует. Это не хорошо.
Я смог исправить это, используя отрицательный просмотр вперед в сочетании с отрицательным просмотром назад.
RewriteCond %{HTTP_HOST} ^((?!dog)[^\.]+(?<!dog))\.example\.com$ [NC]
Это работает. Работает отлично, насколько я могу судить. Дело в том, что я не могу поверить, что это лучший способ добиться этого матча. Прогноз и просмотр назад? Действительно? Каков «правильный» способ получить эквивалентное выражение?