Вот краткий обзор того, что происходит:
RewriteCond %{HTTP_HOST} ^(?!www)([^.]+)\.mydomainname\.com$ [NC]
Во-первых, вопросительный знак должен находиться в конце.
$ 1 будет (должен) соответствовать чему-либо, кроме 'www' 0 или 1 раз.
$ 2 соответствует всему, что не является символом 1 или более раз, что теоретически соответствует пустому пространству, но, вероятно, никогда не совпадет с чем-либо.
Затем после этих двух групп требуется .mydomainname.com.
Ваши первые два условия ищут две отдельные группировки.
Я не уверен, как именно вы пытаетесь настроить свою структуру, но вот как я бы написал ее, основываясь на ваших исходных и ожидаемых URL:
RewriteCond %{HTTP_HOST} !^www\.mydomainname\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(\w+)\.mydomainname\.com$ [NC]
RewriteRule ^(\w+)/(\d+)$ /$1/%1/%1.php?%1_id=$2 [L]
По сути, ваше первое условие - убедиться, что это не URL, начинающийся с «www» (проще просто сделать это отдельным правилом). Второе условие заставляет его проверять любое слово, которое может быть перед вашим доменным именем. Тогда ваше правило перезаписи будет перенаправлено соответствующим образом.
Избавьтесь от последней строки .htaccess в вашем вопросе ...
Кто-то, пожалуйста, поправьте меня, если я что-то не так напечатал. Я не помню, нужно ли указывать «\» перед «\ w» и «\ d», но я все равно включил их.