Apache przekierowanie z non www do www
Mam stronę internetową, która nie wydaje się przekierowywać z non-www do www.
moja konfiguracja Apache jest następująca:
RewriteEngine On
### re-direct to www
RewriteCond %{http_host} !^www.example.com [nc]
RewriteRule ^(.*)$ http://www.example.com/$1 [r=301,nc]
Co mi umyka? 21 answers
Użycie silnika rewrite jest dość ciężkim sposobem na rozwiązanie tego problemu. Oto prostsze rozwiązanie:
<VirtualHost *:80>
ServerName example.com
Redirect permanent / http://www.example.com/
</VirtualHost>
<VirtualHost *:80>
ServerName www.example.com
# real server configuration
</VirtualHost>
I wtedy będziesz miał kolejną <VirtualHost>
sekcja z ServerName www.example.com
dla Twojej PRAWDZIWEJ konfiguracji serwera. Apache automatycznie zachowuje wszystko po /
podczas korzystania z Redirect
dyrektywa , która jest powszechnym błędnym przekonaniem, dlaczego ta metoda nie będzie działać(podczas gdy w rzeczywistości działa).
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-07 15:09:34
http://example.com/subdir/?lold=13666
=> http://www.example.com/subdir/?lold=13666
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
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-24 16:18:46
<VirtualHost *:80>
ServerAlias example.com
RedirectMatch permanent ^/(.*) http://www.example.com/$1
</VirtualHost>
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
2009-07-08 20:32:05
Aby usunąć www
ze swojej strony URL
Użyj tego kodu w pliku .htaccess
:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1$1 [R=301,L]
Aby wymusić www
na swojej stronie URL
Użyj tego kodu na .htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^YourSite.com$
RewriteRule ^(.*)$ http://www.yourSite.com/$1 [R=301]
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule ^(([^/]+/)*[^./]+)$ /$1.html [R=301,L]
Gdzie {[8] } należy zastąpić URL
.
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-30 20:42:07
<VirtualHost *:80>
DocumentRoot "what/ever/root/to/source"
ServerName www.example.com
<Directory "what/ever/root/to/source">
Options FollowSymLinks MultiViews Includes ExecCGI
AllowOverride All
Order allow,deny
allow from all
<What Ever Rules You Need.>
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
Redirect permanent / http://www.example.com/
</VirtualHost>
Tak się dzieje z powyższym kodem. Pierwszy wirtualny blok hosta sprawdza, czy żądanie jest www.example.com i prowadzi Twoją stronę w tym katalogu.
W przeciwnym razie dochodzi do drugiej sekcji wirtualnego hosta. Tutaj Wszystko inne niż www.example.com jest przekierowany do 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.yourdomain.com.
Zdrówko!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-01-16 16:11:12
Jest to podobne do wielu innych sugestii z kilkoma ulepszeniami:
- nie ma potrzeby twardego kodowania domeny (działa z vhostami, które akceptują wiele domen lub między środowiskami)
- zachowuje schemat (http / https) i ignoruje efekty poprzednich reguł
%{REQUEST_URI}
. -
Część ścieżki, na którą nie miały wpływu poprzednie
RewriteRule
S jak%{REQUEST_URI}
jest.RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^(.*)$ %{REQUEST_SCHEME}://www.%{HTTP_HOST}/$1 [R=301,L]
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-07-17 18:21:01
RewriteCond %{HTTP_HOST} ^!example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
Zaczyna się od zmiennej HTTP_HOST
, która zawiera tylko część nazwy domeny przychodzącego adresu URL (example.com
). Zakładając, że nazwa domeny nie zawiera www.
i dokładnie pasuje do nazwy domeny, wtedy w grę wchodzi RewriteRule. Wzorzec ^(.*)$
będzie pasował do wszystkiego w REQUEST_URI
, który jest zasobem wymaganym w żądaniu HTTP (foo/blah/index.html
). Przechowuje to w back reference, który jest następnie używany do przepisania adresu URL z nową nazwą domeny (która zaczyna się od www
).
[NC]
wskazuje dopasowanie wzorca bez rozróżniania wielkości liter, [R=301]
wskazuje zewnętrzne przekierowanie za pomocą kodu 301 (zasób przeniesiony na stałe), a [L]
zatrzymuje wszelkie dalsze przepisywanie i przekierowania natychmiast.
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-22 21:20:17
Sprawdziłam to...
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.*$ [NC]
RewriteRule ^/.+www\/(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Chcę, aby to było uniwersalne dla domen 25+ na naszym nowym serwerze, więc ta dyrektywa jest w moim wirtualnym.plik conf w tagu . (dir jest rodzicem dla wszystkich docroots)
Musiałem trochę zhakować regułę przepisywania, ponieważ pełny docroot był przenoszony na pattern match, pomimo tego, co http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html mówi o tym, że to tylko rzeczy po hosta i portu.
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
2010-06-15 23:39:10
Kod przekierowania dla obu Nie-www = > www i przeciwnych www = > non-www. Brak twardych domen i schematów w .plik htaccess. Tak więc oryginalna Domena i wersja http / https zostaną zachowane.
APACHE 2.4 I NOWSZE
NON-WWW = > WWW:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ %{REQUEST_SCHEME}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
WWW = > NON-WWW:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^ %{REQUEST_SCHEME}://%1%{REQUEST_URI} [R=301,L]
Uwaga: nie działa na Apache 2.2, gdzie %{REQUEST_SCHEME} nie jest dostępne. Dla kompatybilności z Apache 2.2 użyj poniższego kodu lub zamień %{REQUEST_SCHEME} na fixed http / https.
APACHE 2.2 I NOWSZE
NON-WWW = > WWW:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
... albo krótsza wersja ...
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|offs
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
WWW = > NON-WWW:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
... krótsza wersja nie jest możliwa, ponieważ %N jest dostępne tylko z ostatniej sekundy zapisu ...
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-01-20 19:13:12
Przekierowanie domeny.tld do www.
Następujące linie mogą być dodane albo w dyrektywach Apache, albo w .plik htaccess:
RewriteEngine on
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
- Inne sudomainy nadal działają.
- nie ma potrzeby dostosowywania linii. wystarczy skopiować/wkleić je we właściwe miejsce.
Nie zapomnij zastosować zmian apache, jeśli zmodyfikujesz vhost.
(na podstawie domyślnego Drupal7 .htaccess, ale powinno działać w wielu przypadkach)
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-03-28 15:04:44
<VirtualHost *:80>
ServerAlias example.com
RedirectMatch permanent ^/(.*) http://www.example.com/$1
</VirtualHost>
Spowoduje to przekierowanie nie tylko nazwy domeny, ale także wewnętrznej
stron.na przykład...
example.com/abcd.html ==> www.example.com/abcd.html
example.com/ab/cd.html?ef=gh ==> www.example.com/ab/cd.html?ef=gh
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-01-15 07:00:39
Jeśli używasz Apache 2.4, bez potrzeby włączania modułu rewrite apache możesz użyć czegoś takiego:
# non-www to www
<If "%{HTTP_HOST} = 'domain.com'">
Redirect 301 "/" "http://www.domain.com/"
</If>
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-15 09:41:57
RewriteEngine On
RewriteCond %{HTTP_HOST} ^yourdomain.com [NC]
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [L,R=301]
Sprawdź to idealne dzieło
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-09-28 07:17:44
Nie zawsze używać Redirect permanent
(lub dlaczego może powodować problemy)
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 jako VirtualHost
, może również nigdy nie dotrzeć do tej subdomeny, nawet jeśli zostanie zarejestrowana później.
redirect permanent
wysyła HTTP 301 Moved Permanently
do klienta (przeglądarki) i wiele z nich buforuje tę odpowiedź na zawsze (dopóki pamięć podręczna nie zostanie wyczyszczona [ręcznie]). Więc korzystanie z tej subdomeny będzie zawsze autoredirect do www.*** bez ponownego żądania serwera.
Zobacz Jak długo przeglądarki buforują HTTP 301S?
Więc po prostu użyj Redirect
<VirtualHost *:80>
ServerName example.com
Redirect / http://www.example.com/
</VirtualHost>
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-23 10:31:13
Spróbuj tego:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*) http://www.example.com$1 [R=301]
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-22 21:21:28
Mam ten sam problem. Ale rozwiązane z tym
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Ta reguła przekierowuje nie-www do www.
I ta zasada przekierowywania www na nie-www
RewriteEngine On
RewriteCond %{HTTP_HOST} !^my-domain\.com$ [NC]
RewriteRule ^(.*)$ http://my-domain.com/$1 [R=301,L]
Zobacz od http://dense13.com/blog/2008/02/27/redirecting-non-www-to-www-with-htaccess/
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-05-14 11:33:59
To działa dla mnie:
RewriteCond %{HTTP_HOST} ^(?!www.domain.com).*$ [NC]
RewriteRule ^(.*)$ http://www.domain.com$1 [R=301,L]
Używam wzorca look-ahead (?!www.domain.com)
, aby wykluczyć subdomenę www
podczas przekierowywania wszystkich domen do subdomeny www
, aby uniknąć nieskończonej pętli przekierowania w Apache.
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-11-05 21:03:09
Kod, którego używam to:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
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-22 21:22:14
W przypadku zastosowania powyższego rozwiązania dwóch <VirtualHost *:80>
bloków o różnych ServerName
s...
<VirtualHost *:80>
ServerName example.com
Redirect permanent / http://www.example.com/
</VirtualHost>
<VirtualHost *:80>
ServerName www.example.com
</VirtualHost>
... następnie należy ustawić NameVirtualHost On
oraz .
Jeśli tego nie zrobisz, Apache nie pozwala sobie na używanie różnych ServerName
s do rozróżniania bloków, więc otrzymasz komunikat o błędzie:
[warn] _default_ VirtualHost overlap on port 80, the first has precedence
...albo nie ma przekierowania, albo masz nieskończoną pętlę przekierowania, w zależności od tego, który blok umieścisz pierwszy.
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-02-25 11:07:48
Miałem podobne zadanie na multisite WP, gdzie reguła przekierowania musiała być ogólna (dla każdej domeny dodałbym do sieci). Rozwiązałem najpierw dodanie wildcard do domeny(domena zaparkowana). Uwaga . po. com.
CNAME * domain.com.
A następnie dodałem następujące wiersze do.plik htaccess w katalogu głównym mojego multisite. Myślę, że to zadziała na każdą stronę.
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Mam nadzieję, że to pomoże.
Ps. Jeśli chcesz przekierować z not www do www, Zmień ostatnią linię do
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
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-09-22 20:44:58
Okazało się, że łatwiej (i bardziej użyteczne) używać serwerów podczas korzystania z wielu vhostów.
<VirtualHost x.x.x.x:80>
ServerName www.example.com
ServerAlias example.com
....
</VirtualHost>
Działa to również z HTTPS vhosts.
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-09-18 12:11:52