Перенаправить не-www на www в .htaccess
У меня есть это в моем файле .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
?
Ответы
Ответ 1
Измените свою конфигурацию на это (добавьте косую черту):
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.
Я бы сказал, что это плохая идея. Для аргументов прочитайте этот ответ.
Ответ 2
Здесь правильное решение, которое поддерживает https и http:
# Redirect to www
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Ответ 3
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Для Https
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^(.*)$ http%1://www.%{HTTP_HOST}/$1 [R=301,L]
Ответ 4
Следующий пример работает как с ssl, так и с не-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
к
HTTPS
к
Ответ 5
Попробуйте это, я использовал его на многих сайтах, он отлично работает
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^bewebdeveloper.com$
RewriteRule ^(.*) http://www.bewebdeveloper.com/$1 [QSA,L,R=301]
Ответ 6
Добавьте следующий код в файл .htaccess.
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
URL-адрес перенаправления учебника можно найти здесь Перенаправить не-www на www и HTTP в HTTPS с использованием файла .htaccess
Ответ 7
Эта конфигурация работала для меня в 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]
Ответ 8
Я проверил все вышеупомянутые решения, но не работал для меня, я пытался удалить http://и не буду перенаправлять, а также удалил www, он перенаправляет хорошо, поэтому я запутался, особенно я запускаю все свои сайты под https ://
Поэтому я объединил несколько кодов вместе и придумал идеальное решение для http://и https://, а также для www и non-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 ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
Надеюсь, что это может помочь кому-то :)
Ответ 9
RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC]
RewriteRule (.*) http://www.domain.com/$1 [L,R=301]
Это перенаправит ваш домен, который не запущен с помощью WWW
Он не перенаправляет весь ваш домен.
Это полезно.
Ответ 10
Я считаю, что главный ответ успешно перенаправляет не-www на www (ex: 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/$1 [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/$1 [L,R=301]
* note: Я не тестировал https, потому что в настоящее время у меня нет сертификата для тестирования, но если кто-то может проверить или оптимизировать то, что у меня есть, это будет потрясающе.
Ответ 11
Если возможно, добавьте это в основной файл конфигурации Apache. Это более легкое решение, требующее меньше обработки.
<VirtualHost 64.65.66.67>
ServerName example.com
Redirect permanent / http://www.example.com/
</VirtualHost>
<VirtualHost 64.65.66.67>
ServerAdmin [email protected]
ServerName www.example.com
DocumentRoot /var/www/example
.
.
. etc
Таким образом, отдельный VirtualHost
для "example.com" захватывает эти запросы, а затем постоянно перенаправляет их на ваш основной VirtualHost
. Таким образом, нет никакого анализа REGEX с каждым запросом, и ваши клиентские браузеры будут кэшировать перенаправление, чтобы они никогда (или редко) не запрашивали "неправильный" URL-адрес, сохраняя при загрузке сервера.
Обратите внимание, конечная косая черта в Redirect permanent / http://www.example.com/
.
Без него перенаправление из example.com/asdf
будет перенаправлено на http://www.example.comasdf
вместо http://www.example.com/asdf
.
Ответ 12
Два предупреждения
Избегайте 301 и предпочитайте современные коды состояния ответа 303 или 307.
Избегайте 301
Подумайте внимательно, действительно ли вам нужен постоянный редирект, обозначенный как [R=301]
, потому что, если вы решите изменить его позже, предыдущие посетители страницы продолжат видеть страницу исходного перенаправления.
Информация о постоянном перенаправлении часто хранится в кэше браузера, и, как правило, ее трудно устранить (перезагрузка страницы не решает проблему). Посетители вашего сайта застрянут в предыдущем перенаправлении "навсегда".
Избегайте 302 тоже
В новой версии протокола HTTP (v1.1) добавлены два новых кода состояния ответа, которые можно использовать вместо 302.
303
URL перенаправление, но требуется изменить тип запроса на
GET.
307
Перенаправление URL, но требуется сохранить тип запроса в том виде, в котором он был первоначально отправлен.
Вы все еще можете использовать код 302
(непостоянное перенаправление), хотя это считается неоднозначным. В любом случае, большинство браузеров реализуют 302
таким же образом, как инструктирует новый код 303
.
Ответ 13
Записать в .htaccess:)
## Redirect from non-www to www (remove the two lines below to enable)
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]