htaccess редирект для не-www и http и https - PullRequest
15 голосов
/ 06 января 2010

Я хотел бы иметь:

И все, что является http://whatever.example.com НЕ добавляет www как http://www.whatever.example.com.

Ответы [ 2 ]

35 голосов
/ 06 января 2010

Попробуйте это правило:

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Вот объяснение:

  1. Первое условие проверяет, имеет ли поле заголовка HTTP Хост требуемый формат (содержит ровно один период).
  2. Второе условие проверяет, является ли объединенное значение значения переменной HTTPS (значения on и off) и s (так что либо ons, либо offs) равен ons и захватывает s. Это означает, что если %{HTTPS}s оценивается как ons, первая подходящая группа - s и в противном случае пустая.
  3. Правило будет соответствовать всем запросам, так как каждая строка имеет начало (помечено ^) и перенаправляет их на оценочное значение http%1://www.%{HTTP_HOST}%{REQUEST_URI}, если оба условия выполняются. Где %1 - первая соответствующая группа предыдущего условия (s, если HTTPS и пустое значение в противном случае), %{HTTP_HOST} - HTTP Host запроса, а %{REQUEST_URI} - абсолютный путь URL, который был запрошен.
2 голосов
/ 06 января 2010

Попробуйте добавить RewriteCond в ваш файл .htaccess, чтобы перехватывать только SSL - затем сделайте то же самое для стандартного http.

RewriteCond %{HTTPS} on
...