Это единственное хорошее правило, которое я смог придумать, иначе после первоначального переписывания (что очень легко) оно входит в цикл (и это проблема). Например: www.domain.com/www/123.png
правильно перенаправляется в /www/www/123.png
, но затем переходит к следующему циклу, где перенаправляется на /www/www/www/123.png
, а затем снова и снова.
Это правило ТОЛЬКО вызывается, если ФИНАЛЬНОЕ имя файла СУЩЕСТВУЕТ .
RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com$
RewriteCond %{DOCUMENT_ROOT}/%1/$1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/%1/$1 -d
RewriteRule ^(.*)$ /%1/$1 [QSA,L]
Например: если вы запрашиваете www.domain.com/www/123.png
, а файл / папка WEBSITEROOT/www/www/123.png
существуют, то он будет перезаписан, иначе ничего.
То же самое здесь: если вы запрашиваете meow.domain.com/
.. но у вас нет папки WEBSITEROOT/meow/
на вашем диске, это ни к чему не приведет.
Обратите внимание, это все равно мало поможет, если у вас есть подпапка с тем же именем, что и субдомен. Например: если вы запрашиваете www.domain.com
, его следует переписать в WEBSITEROOT/www/
... но если у вас также есть WEBSITEROOT/www/www/
, то (из-за цикла) он будет переписан в WEBSITEROOT/www/www/
.
К сожалению, я не нашел способ, как обойти это. Если хотите - можете попробовать объединить свои правила с моими.