Динамические субдомены + определенные субдомены через htaccess
Я ненавижу задавать вопросы о mod_rewrite, но я не могу заставить эти правила работать правильно. Я его настроил и разобрался однажды, но прошло несколько лет, и теперь он просто не играет хорошо, и мои знания в области mod_rewrite вернулись к ууууу......
По сути, я хочу заставить www на главном домене, example.com. (или принудительное отсутствие www было бы еще лучше, но я не смог удаленно заставить это работать должным образом вместе с динамическими поддоменами).
Если существуют правила my.example.com, следуйте им соответствующим образом
Для всего остального, например: *.example.com, перейдите к другому файлу для анализа.
Правила, которые у меня есть в настоящее время, обрабатывают форсирование www и правильно обрабатывают динамический поддомен, но полностью игнорируют правила my.example.com, обрабатывая его как подстановочный поддомен. Кажется, я могу заставить любое из моих правил работать должным образом, но, пытаясь заставить их работать вместе, это просто ублюдок. Если кто-нибудь знает, как это сделать правильно, это будет очень полезно.
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
# force www on main, force no www would be better.
RewriteCond %{HTTP_HOST} !^(.*)\.example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
# my.example.com defined subdomain
RewriteCond %{HTTP_HOST} !^my\.example\.com$ [NC]
RewriteRule ^.*$ - [S=3]
RewriteRule ^$ /mydirectory/index.php [L]
RewriteRule ^category/([^/]+)/?$ /mydirectory/index.php?category=$1 [L]
RewriteRule ^submit/?$ /mydirectory/process.php [L]
# *.example.com
RewriteCond %{HTTP_HOST} ^(.*)\.com$ [NC]
RewriteCond %1 !^(www)\.examples$ [NC]
RewriteRule ^([^/]+)/?$ /subdomainparse/index.php?subdomain=%1&fakedirectory=$1 [L]
1 ответ
Попробуйте эти правила:
# remove www on main
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
# my.example.com defined subdomain
RewriteCond %{HTTP_HOST} !^my\.example\.com$ [NC]
RewriteRule ^.*$ - [S=3]
RewriteRule ^$ /mydirectory/index.php [L]
RewriteRule ^category/([^/]+)/?$ /mydirectory/index.php?category=$1 [L]
RewriteRule ^submit/?$ /mydirectory/process.php [L]
# *.example.com
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com$ [NC]
RewriteCond %1 !^www$ [NC]
RewriteRule ^([^/]+)/?$ /subdomainparse/index.php?subdomain=%1&fakedirectory=$1 [L]
Первое правило теперь перенаправит +www.example.com* на example.com. И третье правило будет перехватывать любой запрос к несуществующему хосту.