- Czym jest WWW?
- Przekierowanie 301 przy pomocy mod_rewrite w .htaccess
- Przekierowanie www na bez www
- Przekierowanie adresu bez www na www
Czymże jest to WWW? Otóż jest to po prostu skrót od World Wide Web (ang. ogólnoświatowa sieć). W adresach internetowych pełni on rolę przedrostka dla domeny. Przedrostek www w adresie to nic innego jak zwykła subdomena nie różni się niczym od np. subdomena1.tosiek.pl lub subdomena2.tosiek.pl. Niestety lecz ze względu na to że kiedyś nazwa subdomeny wskazywała na to jaką usługę oferuje to i nasze www wskazywało na to że oferuje zawartość serwera Web i tak po prostu się zakorzeniło używanie tego przedrostka w nazwie host’a. Niektórym po prostu czegoś brakuje po nazwie protokołu:
- https://tosiek.pl/
- http://www.tosiek.pl/
Adres z www pasuje wizualnie bo kończy się .pl natomiast host bez www jest krótszy.
Nie ma znaczenia którego z adresów używamy (z www czy bez), ważne jest tylko jedno: korzystamy i linkujemy tylko do jednego adresu! a drugi przekierowujemy na ten właściwy za pomocą 301 Moved Permanently co zapewni nam, że treść się nie zduplikuje i nie będzie problemów z logowaniem za pomocą ciastek a wszystkie stare adresy będą przekierowane na stałe na prawidłowy adres.
Przekierowanie 301 za pomocą .htaccess i mod_rewrite
Przed ustawieniem przekierowania upewnij się, że właściwy adres jest podany w konfiguracji np. forum, bloga etc oraz ustaw pożądanyc przez Ciebie adres w Narzędzia dla Webmasterów od gugla. Jeśli w pliku .htaccess
znajduję się już któraś z tych linijek:
<IfModule mod_rewrite.c> RewriteEngine On #RewriteBase / </IfModule> |
To nie dubluje ich, tylko dodaj samą regułę po linijce RewriteEngine On lub jeśli istnieje to po linijce RewriteBase /. Jeśli jest taka potrzeba to odkomentuj i ustaw odpowiednio RewriteBase
Przekierowanie adresu z WWW na bez
Jeżeli chcesz korzystać z adresu bez przedrostka / subdomeny WWW to musisz przekierować wszystkie adresy za pomocą 301 Moved Permanently. Dodaj do pliku .htaccess reguły:
<IfModule mod_rewrite.c> RewriteEngine On #RewriteBase / RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,NC,NE,L,QSA] </IfModule> |
Od tej pory każdy adres poprzedzony przedrostkiem / subdomeną www. zostanie przekierowany na adres bez www np. http://www.tosiek.pl/ ⇰ https://tosiek.pl/ lub http://www.bb2.tosiek.pl/ ⇰ http://bb2.tosiek.pl/.
Wpis ten sprawdza czy wywołany host jest poprzedzony www. jeśli tak to pobiera wszystko co jest po tym przedrostku i przekierowuje na ten adres razem z zawartością Query String oraz Request URI. Nie ma potrzeby modyfikowania czegokolwiek, napisałem te reguły tak aby były bezobsługowe.
Przekierowanie adresu bez WWW na adres z WWW
Jeżeli chcesz aby każde wywołanie adresu nie poprzedzonego www. zostało przekierowane na adres z www. to dodaj do pliku .htaccess reguły:
<IfModule mod_rewrite.c> RewriteEngine On #RewriteBase / RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,NC,NE,L,QSA] </IfModule> |
Teraz adresy które nie mają na początku www. będą przenoszone za pomocą 301 Moved Permanently na adres poprzedzony www np. https://tosiek.pl/ ⇰ http://www.tosiek.pl/ lub http://bb2.tosiek.pl/ ⇰ http://www.bb2.tosiek.pl/.
Reguła dopasowuje host czy na początku znajduje się www. jeśli nie to przekierowuje na adres z www. razem z Query String i Request URI. Reguła ta nie wymaga żadnych zmian.
03.09.2011 at 23:07
No coś mi tutaj nie gra, chciałem z www na bez www, na
www. domena.pl
działa, lecz nawww. subdomena.domena.pl
przekierowuje mi dziwnie na:subdomena.domena.pl/subdomena
.04.09.2011 at 10:57
Sprawdź nagłówki HTTP jakie wysyła serwer po kolei.
16.09.2011 at 16:12
Witam, a jak przekierować (301) serwis oparty na plikach .html na inną domenę opartą na plikach .php (nazwa plików jest ta sama) ??