Как всегда удалять WWW с URL-адреса с помощью mod_rewrite?
Я использую следующее, чтобы попытаться удалить WWW из URL:
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule (.*) http://example.com$1 [R=301]
Но почему-то это не работает. Любые предложения?
Ответы
Ответ 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>