Подтвердить что ты не робот

Как всегда удалять WWW с URL-адреса с помощью mod_rewrite?

Я использую следующее, чтобы попытаться удалить WWW из URL:

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

Но почему-то это не работает. Любые предложения?

4b9b3361

Ответ 1

Try:

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

И без mod_rewrite:

<VirtualHost 10.0.0.1:80>
        ServerName www.example.com
        Redirect permanent / http://example.com/
</VirtualHost>

Виртуальные хосты могут быть использованы, выполнив шаги в следующем URL-адресе: Настройка виртуального хоста в Apache.

Ответ 2

Это более обобщенное решение:

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

Ответ 3

Как незначительная настройка ответа Кайла, я поставил условие/в условие соответствия RewriteRule, например

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

В противном случае вы получите двойную косую черту.

http://www.example.com/smth -> http://example.com//smth

Ответ 4

Я бы всегда использовал 307 (временное перенаправление), потому что, если вы ошибаетесь, некоторые браузеры кэшируют его навсегда. Я закончил установку Google Chrome только потому, что не смог заставить мой Firefox забыть о плохом перенаправлении, даже когда я удалил весь кеш.

Ответ 5

Вот решение, если вы не хотите жестко закодированное доменное имя. Не забудьте запустить перезаписываемый движок, иначе это не сработает!

 # Start rewrite engine
 <IfModule mod_rewrite.c>
   Options +FollowSymlinks
   RewriteEngine On
 </IfModule>

 # Rewrite "www.example.com -> example.com"
 <IfModule mod_rewrite.c>
   RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
   RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
 </IfModule>