Redirect non-www to www in.htaccess

Mam to w swoim .plik htaccess:

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

Ale za każdym razem, gdy uzyskam dostęp do pliku na moim roocie, takiego jak http://example.com/robots.txt, przekieruje on na http://www.example.comrobots.txt/.

Jak mogę to poprawić, aby przekierować poprawnie do http://www.example.com/robots.txt?

 150
Author: Cristy, 2012-08-21

13 answers

Zmień konfigurację na tę (dodaj ukośnik):

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

Lub rozwiązanie opisane poniżej (zaproponowane przez @absiddiqueLive) będzie działać dla dowolnej domeny:

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

Jeśli chcesz obsługiwać http i https i zachować wybór protokołu, spróbuj wykonać następujące czynności:

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

Gdzie zamieniasz login na checkout.php lub dowolny adres URL, na którym musisz obsługiwać HTTPS.

Ale to zły pomysł. Dla uzasadnienia proszę przeczytać tę odpowiedź .
 313
Author: ranman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-19 03:55:12
RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.

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

Dla Https

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

RewriteRule ^(.*)$ http%1://www.%{HTTP_HOST}/$1 [R=301,L]
 73
Author: absiddiqueLive,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-24 07:29:30

Oto prawidłowe rozwiązanie, które obsługuje https i http:

# Redirect to www
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
 65
Author: Alexey Kosov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-28 08:21:08

Poniższy przykład działa zarówno na ssl i non-ssl i jest znacznie szybszy, ponieważ używasz tylko jednej reguły do zarządzania http i https

RewriteEngine on


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

[sprawdzone]

To przekieruje

Http

Do

Https

Do

 19
Author: starkeen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-23 07:48:02

Spróbuj tego, używałem go na wielu stronach internetowych, działa doskonale

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^bewebdeveloper.com$
RewriteRule ^(.*) http://www.bewebdeveloper.com/$1  [QSA,L,R=301]
 6
Author: Ali Aboussebaba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-22 08:34:02

Ta konfiguracja zadziałała u mnie w bitnami wordpress z konfiguracją SSL:

Dodano poniżej pod "RewriteEngine On" w pliku/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]
 3
Author: Abhilash Mishra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-14 08:39:09
RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC]
RewriteRule (.*) http://www.domain.com/$1 [L,R=301]

Spowoduje to przekierowanie domeny, która nie jest uruchomiona z WWW To nie jest przekierowanie Wszystkie sub domeny.

Jest to przydatne.

 2
Author: Ashish Gondaliya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-19 19:35:51

Uważam, że najlepsza odpowiedź skutecznie przekierowuje nie-www do www (ex: mysite.com -> www.mysite.com ), ale nie uwzględnia subdomen wieloznacznych, co skutkuje:

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

Oto rozwiązanie z / bez 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]

*uwaga: nie testowałem https, ponieważ nie mam obecnie cert do przetestowania, ale jeśli ktoś może zweryfikować lub zoptymalizować to, co mam, byłoby super.

 2
Author: Hunter Frazier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-10 09:03:20

Dodaj następujący kod w .plik htaccess.

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

Url redirect tutorial można znaleźć tutaj - Redirect non-www do www & HTTP do HTTPS za pomocą .plik htaccess

 2
Author: JoyGuru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-28 11:16:13

Przetestowałem wszystkie powyższe rozwiązania, ale nie działa dla mnie, próbowałem usunąć http://i nie przekieruje również usunięte www to przekierować dobrze, więc się mylić, specjalnie jestem uruchomiony wszystkie moje strony pod https: / /

Więc połączyłem kilka kodów razem i wymyśliłem idealne rozwiązanie zarówno dla http:// i https: / / oraz www i 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 ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

Mam nadzieję, że to może komuś pomóc:)

 2
Author: Al3abMizo Games,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-11 12:57:55

Jeśli to możliwe, dodaj to do głównego pliku konfiguracyjnego Apache. Jest to lżejsze rozwiązanie, mniej wymagane przetwarzanie.

<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

Więc oddzielny VirtualHost dla "example.com" przechwytuje te żądania, a następnie trwale przekierowuje je do głównej VirtualHost. Nie ma więc parsowania REGEX przy każdym żądaniu, a przeglądarki klienckie będą buforować przekierowanie, więc nigdy (lub rzadko) ponownie nie będą żądać "złego" adresu url, oszczędzając na obciążeniu serwera.

Uwaga, końcówka ukośnika w Redirect permanent / http://www.example.com/. Bez niego przekierowanie z example.com/asdf przekierowywałoby do http://www.example.comasdf zamiast http://www.example.com/asdf.

 0
Author: Buttle Butkus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-21 04:56:07

Dwa ostrzeżenia

Unikaj 301 i preferuj nowoczesne kody statusu odpowiedzi 303 lub 307.

Unikaj 301

Zastanów się dokładnie, czy naprawdę potrzebujesz stałego przekierowania oznaczonego jako [R=301], ponieważ jeśli zdecydujesz się go zmienić później, poprzedni odwiedzający stronę będą nadal widzieć stronę oryginalnego przekierowania.

Informacje o stałym przekierowaniu są często przechowywane w pamięci podręcznej przeglądarki i ogólnie trudno je wyeliminować (przeładować strona nie rozwiązuje problemu). Odwiedzający Twoją stronę utkną w poprzednim przekierowaniu "na zawsze".

Unikaj też 302

Nowa wersja protokołu HTTP (v1.1) dodała dwa nowe kody statusu odpowiedzi, które mogą być używane zamiast 302.

  • 303 przekierowanie URL, ale żądające zmiany typu żądania na GET.
  • 307 przekierowanie URL, ale żądające zachowania typu żądania, jak pierwotnie wysłane.

Możesz nadal używać kodu 302 (przekierowanie nietrwałe), choć jest ono uważane za niejednoznaczne. W każdym razie większość przeglądarek implementuje 302 w taki sam sposób, jak instruuje nowy kod 303.

 0
Author: ePi272314,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-13 18:47:00

Pisz .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]
 -1
Author: Piseth Sok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-03 01:55:37