Jak mogę wymusić, aby moje adresy URL zawsze zaczynały się od www?

17

Chcę mieć pewność, że użytkownicy przyjdą, www.mydomain.comnawet jeśli dotrą przez alias mydomain.com. Dzięki temu mam kontrolę nad plikami cookie w subdomenach, a Google widzi jedną domenę, a nie maskę adresów URL.

Jak mogę to zrobić za pomocą apache?

Magnar
źródło
5
Czy mogę zasugerować, byś to odwrócił i zamiast tego wyegzekwowałeś mydomain.com? Prefiks „www” jest zbędny i całkowicie niepotrzebny.
Eevee
Pliki cookie są wysyłane do wszystkich subdomen na mydomain.com, podczas gdy sam mogę zdecydować, które pliki cookie są ładowane z witryny www.mydomain.com. Na przykład mogę uniknąć dodawania plików cookie do static.mydomain.com, aby pliki cookie nie były przesyłane dla każdego załadowanego obrazu. To zdecydowanie nie jest niepotrzebne.
Magnar
Możesz w szczególności powiedzieć Google, aby używał jednego stylu łączenia. Zobacz moją odpowiedź poniżej.
Robinicks
Nie mam przedstawiciela, ale dodanie tych tagów byłoby pomocne: przekierowanie przekierowania mod_alias
Tom
1
Chociaż jest to znacznie później, nadal jest aktualne. www nie jest przestarzałe, ponieważ domena bez subdomeny ma kilka wad. Zobacz tak-www.org/why-use-www z kilku powodów, aby używać www.
user50849,

Odpowiedzi:

17
<VirtualHost ip:80>
   ServerName domain.com
   RedirectMatch permanent ^(.*)$ http://www.domain.com$1
</VirtualHost>

<VirtualHost ip:80>
   ServerName www.domain.com

   ... usual config
</VirtualHost>
Dave Cheney
źródło
7
Dla nieco prostszego rozwiązania możesz: „Przekierować permanent / ptth: //www.domain.com/”, a apache automatycznie zachowa przyrostek. (Odwróciłem http, aby wyłączyć automatyczne
łącze
1
Naprawdę Kochanie, nigdy tego nie wiedziałem. Zawsze myślałem, że musisz użyć RedirectMatch, aby zachować końcowe części URI
Dave Cheney
4

Dodaj to do swojego httpd.confpliku:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]
Magnar
źródło
4

Włącz obsługę mod_rewrite, a następnie utwórz plik .htaccess w folderze głównym dla swojej domeny o następującej treści:

<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   RewriteBase /
   RewriteCond %{HTTP_HOST} ^domain\.com$
   RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
</IfModule>
Richard Slater
źródło
nie zapomnij, aby test RewriteCond nie rozróżniał wielkości liter ...
Alnitak
Zrób to tylko, jeśli z jakiegoś powodu nie masz dostępu do wprowadzania zmian w pliku konfiguracyjnym apache. .htaccesspliki mają dużo narzutu, a przepisywanie w nich znacznie go pogorszy.
John Dalton
użycie przekierowania jest zawsze lepsze niż użycie mod_rewrite do tego zadania.
David Pashley,
3

Jeśli naprawdę chcesz, aby Google używał określonego stylu domeny (z lub bez www ), a następnie utwórz bezpłatne konto Narzędzi Google dla webmasterów , sprawdź własność domeny (prześlij plik) i ustaw preferowaną domenę za pomocą internetowego panelu sterowania.

To takie proste i nie musisz zmieniać żadnego kodu po stronie serwera, również linki przychodzące z lub bez www będą traktowane tak samo, zwiększając PageRank twoich stron.

Linki mogą prowadzić do Twojej witryny przy użyciu zarówno URL-a, jak i wersji innych niż www (na przykład http://www.example.com i http://example.com ). Preferowaną domeną jest wersja, której chcesz używać dla swojej witryny w wynikach wyszukiwania .

Gdy podasz nam preferowaną nazwę domeny, weźmiemy pod uwagę Twoje preferencje podczas wyświetlania adresów URL. Może minąć trochę czasu, zanim zmiana zostanie w pełni odzwierciedlona w naszym indeksie.

Jeśli nie określisz preferowanej domeny, możemy traktować wersje domeny www i inne niż www jako oddzielne odniesienia do oddzielnych stron.

Robinicks
źródło
1

Miałem odwrotny problem, ludzie przechodzili na stronę www.domain.com, gdy chcę tylko serwować bezpośrednio z domeny.com:

<VirtualHost *:80>
   ServerName domain.com

   ... usual config
</VirtualHost>

<VirtualHost *:80>
   ServerName www.domain.com
   ServerAlias sub.domain.com # can also catch some other subdomains
   ServerAlias *.domain.com # or all previously unmatched domains

   Redirect permanent / http://domain.com/
</VirtualHost>

Jak wspomniał Greg Hewgill, używanie Przekierowania jest nieco prostsze niż RedirectMatch i wykonuje tę samą pracę, więcej informacji można znaleźć na stronie http://httpd.apache.org/docs/2.0/mod/mod_alias.html#redirect .

Tomek
źródło