Общий htaccess перенаправить www на не-www - PullRequest
471 голосов
/ 24 октября 2008

Я бы хотел перенаправить www.example.com на example.com. Следующий код htaccess делает это возможным:

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

Но есть ли способ сделать это в общем виде без жесткого кодирования доменного имени?

Ответы [ 22 ]

843 голосов
/ 13 августа 2009
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

То же, что и Майкл , за исключением того, что работает: P

105 голосов
/ 19 марта 2010

Но если нам нужно сделать это для отдельных http и https:

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
70 голосов
/ 10 марта 2011

Перенаправление без www на www (оба: http + https)

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
44 голосов
/ 10 марта 2011

Если вы хотите сделать это в файле httpd.conf, вы можете сделать это без mod_rewrite (и, очевидно, это лучше для производительности).

<VirtualHost *>
  ServerName www.example.com
  Redirect 301 / http://example.com/
</VirtualHost>

Я получил ответ здесь: https://serverfault.com/questions/120488/redirect-url-within-apache-virtualhost/120507#120507

33 голосов
/ 28 апреля 2012

Вот правила перенаправления URL-адреса www на no-www:

#########################
# redirect www to no-www
#########################

RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule ^(.*) http://%1/$1 [R=301,NE,L]

Вот правила перенаправления URL без www на www:

#########################
# redirect no-www to www
#########################

RewriteCond %{HTTP_HOST} ^(?!www\.)(.+) [NC]
RewriteRule ^(.*) http://www.%1/$1 [R=301,NE,L]

Обратите внимание, что я использовал флаг NE для предотвращения выхода Apache из строки запроса. Без этого флага apache изменит запрошенный URL http://www.example.com/?foo%20bar на http://www.example.com/?foo%2250bar

11 голосов
/ 25 октября 2008
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^/(.*)$ http://%1/$1 [R]

RewriteCond захватывает все в переменной HTTP_HOST после www. и сохраняет ее в %1.

RewriteRule захватывает URL без начального / и сохраняет его в $1.

7 голосов
/ 24 октября 2008

Попробуйте это:

RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.*)$ %{HTTP_HOST}$1 [C]
RewriteRule ^www\.(.*)$ http://$1 [L,R=301]

Если хост начинается с www, мы помещаем весь хост в начало URL, затем снимаем "www."

6 голосов
/ 09 февраля 2016

Полный общий обработчик WWW, http / https

Я не увидел полного ответа. Я использую это для обработки WWW включения.

  1. Generic. Не требуется информация о домене.
  2. Принудительно использует WWW на основном домене: www.domain.com
  3. Удаляет WWW на поддоменах: sub.domain.com
  4. Сохраняет статус HTTP / HTTPS.
  5. Разрешает использование отдельных файлов cookie для домена / поддоменов

Пожалуйста, дайте мне знать, как это работает, или если я оставил лазейку.

RewriteEngine On
RewriteBase /

# Force WWW. when no subdomain in host
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$ [NC]
RewriteCond %{HTTPS}s ^on(s)|off [NC]
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Remove WWW. when subdomain(s) in host     
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|off [NC]
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)(.+\.)(.+\.)(.+)$ [NC]
RewriteRule ^ %1%3%4%5%{REQUEST_URI} [R=301,L]
6 голосов
/ 17 января 2011

Там может быть много дезинформации о перенаправлениях htaccess, я нахожу. Прежде всего, убедитесь, что ваш сайт работает в Unix с использованием Apache, а не на хосте Windows, если вы ожидаете, что этот код будет работать.

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]

RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

(Убедитесь, что между каждой строкой текста нет пробелов; я добавил дополнительный пробел между строками, чтобы в этом окне он выглядел нормально).

Это один фрагмент кода, который можно использовать для направления www-версии вашего сайта на http: // version. Есть и другие похожие коды, которые также можно использовать.

3 голосов
/ 03 марта 2015

www на не www с https

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
...