Перенаправить не-www на www в .htaccess

189

У меня есть это в моем файле .htaccess:

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

но всякий раз, когда я получаю доступ к файлу в моем корне, http://example.com/robots.txtон будет перенаправлен на http://www.example.comrobots.txt/.

Как я могу исправить это так, чтобы он был перенаправлен правильно http://www.example.com/robots.txt?

Пол Санчес
источник

Ответы:

391

Измените свою конфигурацию на это (добавьте косую черту):

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

Или решение, описанное ниже (предложенное @absiddiqueLive ) будет работать для любого домена:

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

Если вам нужно поддерживать http и https и сохранить выбор протокола, попробуйте следующее:

RewriteRule ^login\$ https://www.%{HTTP_HOST}/login [R=301,L]

Где вы заменяете loginс checkout.phpили любой URL вы должны поддерживать HTTPS на.

Я бы сказал, что это плохая идея. Для рассуждений, пожалуйста, прочитайте этот ответ .

Рэндалл Хант
источник
Это решение не работает, когда некоторые страницы (например, логин или регистрация) используют протокол https.
Алексей Косов
Я немного обновил пост, чтобы включить некоторую информацию. Трудно как в общем, так и правильно выбрать протокол для использования.
Рэндалл Хант
3
Первое решение недостаточно перенаправляет, второе кажется слишком перенаправленным. Например blog.example.comстановитсяwww.blog.example.com
gman
Не могли бы вы также добавить, как избежать перенаправления при разработке на localhost?
Bugs Bunny
Я следил за всем здесь, но ничего не работает. Я использую настройку Laravel. Кто-нибудь знает, почему это не работает для меня? www.domain.com и domain.com оба загружаются правильно, но domain.com не перенаправляет на www.domain.com. Может ли это быть проблемой с моим DNS?
Привет мир