Adres z WWW czy bez?

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.

3 Comments

  1. No coś mi tutaj nie gra, chciałem z www na bez www, na www. domena.pl działa, lecz na www. subdomena.domena.pl przekierowuje mi dziwnie na: subdomena.domena.pl/subdomena.

  2. Witam, a jak przekierować (301) serwis oparty na plikach .html na inną domenę opartą na plikach .php (nazwa plików jest ta sama) ??

Dodaj komentarz