Перенаправление не-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 ответов:
измените конфигурацию на эту (добавьте косую черту):
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
код дает.