Mam witrynę, która nie wydaje się przekierowywać z innych niż www na www.
Moja konfiguracja Apache wygląda następująco:
RewriteEngine On
### re-direct to www
RewriteCond %{http_host} !^www.example.com [nc]
RewriteRule ^(.*)$ http://www.example.com/$1 [r=301,nc]
czego mi brakuje?
apache
redirect
mod-rewrite
no-www
użytkownik121196
źródło
źródło
.htaccess
rozwiązania opartego na propozycji sugeruję odpowiedź na pytanie o średnicy: stackoverflow.com/a/5262044/367456Odpowiedzi:
Korzystanie z silnika przepisywania jest dość ciężkim sposobem rozwiązania tego problemu. Oto prostsze rozwiązanie:
A potem będziesz mieć inną
<VirtualHost>
sekcję zServerName www.example.com
prawdziwą konfiguracją serwera. Apache automatycznie zachowuje wszystko po/
użyciuRedirect
dyrektywy , co jest powszechnym błędnym przekonaniem o tym, dlaczego ta metoda nie działa (kiedy w rzeczywistości działa).źródło
www.example
iexample
gdziekolwiek występują w próbce.Redirect 301 / http://example2.com/extra/
ale gdy przekierowuje, pomija ukośnik końcowy, co oznacza, żeexample.com/blah
idzie doexample2.com/extrablah
. Jakieś pomysły? (Apache 2.2.22)http://example.com/subdir/?lold=13666
=>http://www.example.com/subdir/?lold=13666
źródło
example.com/subdi1/ws/*
bez www?s
do http w trzecim rzędzie.źródło
www.
wServerAlias
?Aby usunąć
www
zURL
witryny, użyj tego kodu z.htaccess
pliku:Aby wymusić
www
na swojej stronie,URL
użyj tego kodu na.htaccess
Gdzie
YourSite.com
należy wymienić na swójURL
.źródło
Tak dzieje się z powyższym kodem. Pierwszy wirtualny blok hosta sprawdza, czy żądanie to www.example.com i uruchamia witrynę w tym katalogu.
W przeciwnym razie dochodzi do drugiej sekcji hosta wirtualnego. Tutaj wszystko inne niż www.example.com jest przekierowywane na www.example.com.
Kolejność tutaj ma znaczenie. Jeśli najpierw dodasz drugą dyrektywę virtualhost, spowoduje to pętlę przekierowania.
To rozwiązanie przekieruje każde żądanie do Twojej domeny, na www.twojadomena.com.
Twoje zdrowie!
źródło
Jest to podobne do wielu innych sugestii z kilkoma ulepszeniami:
%{REQUEST_URI}
reguł.Część ścieżki, na którą nie wpływają poprzednie
RewriteRule
s,%{REQUEST_URI}
to.źródło
Zaczyna się od
HTTP_HOST
zmiennej, która zawiera tylko część nazwy domeny przychodzącego adresu URL (example.com
). Zakładając, że nazwa domeny nie zawiera awww.
i dokładnie pasuje do nazwy domeny, wtedy zaczyna obowiązywać RewriteRule. Wzorzec^(.*)$
będzie pasował do wszystkiegoREQUEST_URI
, co jest zasobem wymaganym w żądaniu HTTP (foo/blah/index.html
). Przechowuje to w referencji wstecznej, która jest następnie używana do przepisania adresu URL nową nazwą domeny (taką, która zaczyna się odwww
).[NC]
wskazuje rozróżnianie wielkości liter bez rozróżniania wielkości liter,[R=301]
wskazuje zewnętrzne przekierowanie za pomocą kodu 301 (zasób przeniesiony na stałe),[L]
zatrzymuje wszelkie dalsze przepisywanie i natychmiast przekierowuje.źródło
Kod przekierowania zarówno dla strony innej niż www => www jak i przeciwnej www => non www. Brak domen i schematów na stałe w pliku .htaccess. Tak więc domena pochodzenia i wersja http / https zostaną zachowane.
PODAJ 2.4 i nowszy
NIE-WWW => WWW:
WWW => NIE-WWW:
Uwaga: nie działa na Apache 2.2, gdzie% {REQUEST_SCHEME} jest niedostępny. Aby zachować zgodność z Apache 2.2, użyj kodu poniżej lub zamień% {REQUEST_SCHEME} na stały http / https.
PODAJ 2.2 i nowszy
NIE-WWW => WWW:
... lub krótsza wersja ...
WWW => NIE-WWW:
... krótsza wersja nie jest możliwa, ponieważ% N jest dostępny tylko z ostatniego RewriteCond ...
źródło
Uruchomiłem to ...
Potrzebuję uniwersalności dla ponad 25 domen na naszym nowym serwerze, więc ta dyrektywa znajduje się w moim pliku virtual.conf w znaczniku <Directory>. (reż jest rodzicem wszystkich dokumentów)
Musiałem jednak trochę zhakować zasadę przepisywania, ponieważ pełny docroot został przeprowadzony podczas dopasowania wzorca, pomimo tego, co mówi http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html o tym, że to tylko rzeczy po hoście i porcie.
źródło
Jeśli używasz Apache 2.4, bez konieczności włączania modułu przepisywania Apache, możesz użyć czegoś takiego:
źródło
Przekieruj domain.tld na www.
Następujące linie można dodać w dyrektywach Apache lub w pliku .htaccess:
Nie zapomnij zastosować zmian w apache, jeśli zmodyfikujesz vhost.
(w oparciu o domyślny .htaccess Drupal7, ale powinien działać w wielu przypadkach)
źródło
To jest proste!
źródło
To przekieruje nie tylko nazwę domeny, ale także wewnętrzne strony. Jak ...
example.com/abcd.html ==> www.example.com/abcd.html
example.com/ab/cd.html?ef=gh ==> www.example.com/ab/cd.html?ef=gh
źródło
Spróbuj tego:
źródło
Nie zawsze używaj
Redirect permanent
(lub dlaczego może to powodować problemy w przyszłości)Jeśli istnieje szansa, że dodasz subdomeny później, nie używaj
redirect permanent
.Ponieważ jeśli klient użył subdomeny, która nie została zarejestrowana
VirtualHost
, może również nigdy nie dotrzeć do tej subdomeny, nawet jeśli zostanie ona później zarejestrowana.redirect permanent
wysyłaHTTP 301 Moved Permanently
do klienta (przeglądarkę) i wiele z nich buforuje tę odpowiedź na zawsze (dopóki pamięć podręczna nie zostanie wyczyszczona [ręcznie]). Dlatego użycie tej subdomeny zawsze spowoduje automatyczne przekierowanie na stronę www. *** bez ponownego żądania serwera.zobacz Jak długo przeglądarki buforują HTTP 301?
Więc po prostu użyj
Redirect
Apache.org - Kiedy nie używać mod_rewrite
Apache.org - kanoniczne nazwy hostów
źródło
RewriteEngine On RewriteCond %{HTTP_HOST} ^yourdomain.com [NC] RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [L,R=301]
sprawdź tę idealną pracę
źródło
Mam tylko ten sam problem. Ale rozwiązany z tym
RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Ta reguła przekierowuje stronę inną niż www na www.
I ta reguła przekierowuje www na inne niż www
RewriteEngine On RewriteCond %{HTTP_HOST} !^my-domain\.com$ [NC] RewriteRule ^(.*)$ http://my-domain.com/$1 [R=301,L]
Patrz http://dense13.com/blog/2008/02/27/redirecting-non-www-to-www-with-htaccess/
źródło
To działa dla mnie:
Używam wzorca
(?!www.domain.com)
przewidywania, aby wykluczyćwww
subdomenę podczas przekierowywania wszystkich domen dowww
subdomeny, aby uniknąć nieskończonej pętli przekierowań w Apache.źródło
Używam kodu:
źródło
-Jeśli hostujesz wiele nazw domen (opcjonalnie)
-Jeśli wszystkie te nazwy domen używają https (tak jak powinny)
-jeśli chcesz, aby wszystkie te nazwy domen używały www krop nazwa_domeny
Pozwoli to uniknąć przekierowania podwójnego (http: // non www do http: // www, a następnie do https: // www)
I
Powinieneś zmienić kod przekierowania 301 na najwygodniejszy
źródło
Jeśli używasz powyższego rozwiązania dwóch
<VirtualHost *:80>
bloków o różnychServerName
s ...... wtedy należy ustawić
NameVirtualHost On
tak dobrze .Jeśli tego nie zrobisz, Apache nie pozwoli sobie na użycie różnych
ServerName
s do rozróżnienia bloków, więc pojawia się następujący komunikat o błędzie:... i albo nie następuje przekierowanie, albo masz nieskończoną pętlę przekierowania, w zależności od tego, który blok umieścisz jako pierwszy.
źródło
Miałem podobne zadanie na WP Multisite, gdzie reguła przekierowywania musiała być ogólna (dla dowolnej domeny, którą dodałbym do sieci). Rozwiązałem najpierw dodając symbol wieloznaczny do domeny (zaparkowana domena). Zanotuj . po .com.
A potem dodałem następujące wiersze do pliku .htaccess w katalogu głównym mojej witryny. Myślę, że to zadziałałoby na każdej stronie.
Mam nadzieję, że to pomoże.
ps. Jeśli chcesz przekierować z nie www na www, zmień ostatni wiersz na
źródło
Uznałem, że łatwiej (i bardziej użyteczne) jest używanie ServerAlias podczas korzystania z wielu vhostów.
Działa to również z vhostami https.
źródło