Исключение поддомена из.правила перезаписи htaccess mod?

Я не слишком хорошо знаком .htaccess файлы, и я пытаюсь исключить поддомен (что-то вроде dev.example.com) из следующего правила перезаписи, которое уже существует:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/ [L,R=301]

это правило запрещает кому-либо просто войти example.com или http://example.com и заставляет желаемое представление URL,http://www.example.com.

Я пробовал несколько вариантов исключения поддомена из этого правила перезаписи, но безрезультатно. Каждый из каталогов на сайте имеет свой собственный .реврайт файл, но, похоже, этот все еще имеет приоритет. Есть идеи? Спасибо!

3 ответов


существующее правило уже исключает поддомен. Вам просто нужно добавить новое условие:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{HTTP_HOST} !^dev\.example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/ [L,R=301]

вы также можете избавиться от регулярных выражений:

RewriteEngine On
RewriteCond %{HTTP_HOST} !=www.example.com [NC]
RewriteCond %{HTTP_HOST} !=dev.example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/ [L,R=301]

синтаксис можно найти в http://httpd.apache.org/docs/2.2/en/mod/mod_rewrite.html#rewritecond


Я не уверен, что это может подойти для вас, но рекомендуется использовать конфигурацию Apache virtualhosts вместо .htaccess файлы. В этом случае для перенаправления без www - > www я обычно использую что-то вроде:

<VirtualHost *:80>
    ServerName  example.com
    RedirectMatch permanent ^(.*) http://www.example.com
</VirtualHost>

это вообще безопаснее, чем mod_rewrite правило.


RewriteEngine On
RewriteCond %{HTTP_HOST} !^(dev|www)\.example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/ [L,R=301]