Перенаправление не-www на www in.htaccess


у меня это в моем .файл htaccess:

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

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

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

13 150

13 ответов:

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

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

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

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

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

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

где вместо login С checkout.php или любой URL, который вам нужен для поддержки HTTPS.

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

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.

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

Для Https

RewriteCond %{HTTPS}s ^on(s)|

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

вот правильное решение, которое поддерживает https и http:

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

следующий пример работает как ssl и non-ssl и гораздо быстрее, как вы используете только одно правило для управления http и https

RewriteEngine on


RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTPS}s on(s)|offs()
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]

[проверено]

это перенаправит

http

to

https

to

попробуйте это, я использовал его во многих веб-сайтах, он отлично работает

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^bewebdeveloper.com$
RewriteRule ^(.*) http://www.bewebdeveloper.com/  [QSA,L,R=301]

эта конфигурация работала для меня в bitnami wordpress с настроенным SSL:

добавлено ниже в разделе "RewriteEngine On" в файле /opt/bitnami/apps/wordpress/conf/httpd-app.conf

RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC]
RewriteRule (.*) http://www.domain.com/ [L,R=301]

это перенаправит ваш домен, который не запускается с WWW Это не перенаправление всего поддомена.

Это полезно.

Я считаю, что верхний ответ успешно перенаправляет non-www на www (например:mysite.com - > www.mysite.com), но не учитывает подстановочные поддомены, что приводит к:

random.mysite.com -> www.random.mysite.com

вот решение с/без HTTPS

HTTP

RewriteEngine On

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

HTTP / HTTPS

RewriteEngine On

RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [env=protocol:https]

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [env=protocol:http]

RewriteCond %{HTTP_HOST} !www.mysite.com$ [NC]
RewriteRule ^(.*)$ %{ENV:protocol}://www.mysite.com/ [L,R=301]

*примечание: Я не тестировал https, потому что в настоящее время у меня нет сертификата для тестирования, но если кто-то может проверить или оптимизировать то, что я иметь это было бы потрясающе.

добавьте следующий код .файл htaccess.

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

URLs перенаправление учебник можно найти здесь -перенаправление не-www на www и HTTP на HTTPS с помощью .htaccess file

Я проверил все вышеперечисленные решения, но не работает для меня, я попытался удалить http://и не будет перенаправлять также удалил www это перенаправление хорошо, так что я запутался, специально я запускаю все мои сайты под https://

поэтому я объединил некоторые коды вместе и придумал идеальное решение для обоих http:// и https:// и www и не-www.

# HTTPS forced
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
# Redirect to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/ [R=301,L]
</IfModule>

надеюсь, что это может помочь кому-то :)

если возможно, добавьте это в основной файл конфигурации Apache. Это более легкое решение, требующее меньше обработки.

<VirtualHost 64.65.66.67>
        ServerName example.com
        Redirect permanent / http://www.example.com/
</VirtualHost>
<VirtualHost 64.65.66.67>
   ServerAdmin me@example.com
   ServerName www.example.com
   DocumentRoot /var/www/example
   .
   .
   . etc

Итак, отдельный VirtualHost для "example.com" захватывает эти запросы, а затем постоянно перенаправляет их на ваш основной VirtualHost. Таким образом, нет разбора регулярных выражений с каждым запросом, и ваши клиентские браузеры будут кэшировать перенаправление, чтобы они никогда (или редко) не запрашивали "неправильный" url-адрес снова, экономя вас на загрузке сервера.

отметим, косую черту в Redirect permanent / http://www.example.com/. Без него редирект от example.com/asdf перенаправит на http://www.example.comasdf вместо http://www.example.com/asdf.

два предупреждения

избегайте 301 и предпочитайте современные 303 или 307 кодов состояния ответа.

избегайте 301

подумайте внимательно, если вам действительно нужно постоянное перенаправление указано как [R=301] потому что если вы решите изменить его позже, то предыдущие посетители страницы будут продолжать видеть страницу исходного перенаправления.

информация о постоянном перенаправлении часто хранится в кэше браузера и, как правило, это трудно устранить (перезагрузка страницы не решает проблему). Посетители вашего сайта застрянут в предыдущем редиректе "навсегда".

избегайте 302 тоже

в новой версии протокола HTTP (v1.1) добавлены два новых кода состояния ответа, которые можно использовать вместо 302.

  • 303 перенаправление URL, но требует изменить тип запроса на ПОЛУЧИТЬ.
  • 307 URL-адрес перенаправления, но требуя, чтобы сохранить тип запроса, как изначально отправили.

вы все еще можете использовать код 302 (непостоянное перенаправление), хотя это считается неоднозначным. В любом случае, большинство браузеров реализуют 302 точно так же новый 303 код дает.

писать .htaccess:)

## Redirect from non-www to www (remove the two lines below to enable)
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/ [R=301,L]