RewriteRule ^([^/]+/)\d+/$ /$1 [L,R=301]
Там почему-то css стили объявлены перед <!DOCTYPE html>.
Поставьте их между тегами <head> </head>.
Два и более повторений это {2,}
Знаки вопроса и равно можно убрать из [^...\?\=]
/[\/\-?]{2,}|[^a-zA-Z0-9\/\-]/
В самом верху файла .htaccess сразу после RewriteEngine On вставить:
RewriteCond %{QUERY_STRING} .RewriteRule ^[^/]+/$ /$0? [L,R=301]
Смотря где расположен .htaccess в корне или в папке images.
Если images, то достаточно только
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*) file.php?id=$1
Можно попробовать добиться нужного результата перенаправляя на несуществующую страницу.
RewriteCond %{HTTP_HOST} moskva\.my-site\.ruRewriteRule ^$ http://my-site.ru/city.html [P]RewriteCond %{HTTP_HOST} moskva\.my-site\.ruRewriteRule ^ lol [L]
RewriteCond %{HTTP_HOST} moskva\.my-site\.ruRewriteRule ^$ http://my-site.ru/city.html [P]RewriteCond %{HTTP_HOST} moskva\.my-site\.ruRewriteRule ^ - [L,F]
Только там ответ будет 403 а не 404
Для главной страницы поддомена
RewriteCond %{HTTP_HOST} moskva\.my-site\.ruRewriteRule ^$ http://my-site.ru/city.html [P]
Не фурычит, потому что ^/robots.txt$ слеш тут лишний.
RewriteRule ^robots.txt$ http://my-site.ru/robots.php [P]
В RewriteCond %{REQUEST_URI} начальный слеш есть, а в RewriteRule его нету.
По поводу зацикливания с директивой Redirect 301
RedirectMatch 301 ^/katalog-paneley$ http://site.ru/category/katalog-paneley/21-35mm RedirectMatch 301 ^/katalog-paneley/nichiha$ http://site.ru/category/katalog-paneley/21-35mm RedirectMatch 301 ^/category/katalog-paneley$ http://site.ru/category/katalog-paneley/21-35mm