Nginx no-www to www and www to no-www
Jeśli chcesz dowiedzieć się więcej na ten temat, skontaktuj się z nami, aby dowiedzieć się więcej na ten temat.
Chcę www.mysite.com aby przejść do mysite.com jak zwykle whtaccess dla SEO i innych powodów.
My / etc / nginx / sites-available / www. example.com. vhost config:
server {
listen 80;
server_name www.example.com example.com;
root /var/www/www.example.com/web;
if ($http_host != "www.example.com") {
rewrite ^ http://example.com$request_uri permanent;
}
Ja też próbowałem
server {
listen 80;
server_name example.com;
root /var/www/www.example.com/web;
if ($http_host != "www.example.com") {
rewrite ^ http://example.com$request_uri permanent;
}
Ja też próbowałem. Obie drugie próby powodują błędy pętli redirect.
if ($host = 'www.example.com' ) {
rewrite ^ http://example.com$uri permanent;
}
Mój DNS jest ustawiony jako standard:
site.com 192.192.6.8 A type at 300 seconds
www.site.com 192.192.6.8 A type at 300 seconds
(przykładowe adresy IP i foldery zostały użyte w przykładach i aby pomóc ludziom w przyszłości). Używam Ubuntu 11.
15 answers
Rozwiązanie HTTP
Z dokumentacji , "właściwym sposobem jest zdefiniowanie oddzielnego serwera dla example.org": {]}
server {
listen 80;
server_name example.com;
return 301 http://www.example.com$request_uri;
}
server {
listen 80;
server_name www.example.com;
...
}
Rozwiązanie HTTPS
Dla tych, którzy chcą rozwiązania, w tym https://
...
server {
listen 80;
server_name www.domain.com;
# $scheme will get the http protocol
# and 301 is best practice for tablet, phone, desktop and seo
return 301 $scheme://domain.com$request_uri;
}
server {
listen 80;
server_name domain.com;
# here goes the rest of your config file
# example
location / {
rewrite ^/cp/login?$ /cp/login.php last;
# etc etc...
}
}
Uwaga: pierwotnie nie uwzględniłem https://
w moim rozwiązaniu, ponieważ używamy loadbalancers, a nasz serwer https:// jest serwerem płatności SSL o dużym natężeniu ruchu: nie mieszamy https: / / i http://.
Aby sprawdzić wersję nginx, użyj
nginx -v
.
W tym celu należy skontaktować się z naszym Biurem Obsługi Klienta.]}
Więc musisz mieć dwa kody serwera. W tym celu prosimy o zapoznanie się z naszą Polityką Prywatności.]}
Jeśli potrzebujesz czegoś odwrotnego, aby przekierować z domain.com na www.domain.com, możesz użyć tego: Jak można sobie wyobrazić, jest to dokładnie odwrotnie i działa w ten sam sposób w pierwszym przykładzie. W ten sposób nie dostaniesz znaczników SEO, ponieważ jest to kompletne przekierowanie perm i przeniesienie. Na brak WWW jest wymuszony i katalog pokazany!server {
server_name www.domain.com;
rewrite ^(.*) http://domain.com$1 permanent;
}
server {
server_name domain.com;
#The rest of your configuration goes here#
}
server {
server_name domain.com;
rewrite ^(.*) http://www.domain.com$1 permanent;
}
server {
server_name www.domain.com;
#The rest of your configuration goes here#
}
Niektóre z mojego kodu pokazanego poniżej dla lepszego widoku:
server {
server_name www.google.com;
rewrite ^(.*) http://google.com$1 permanent;
}
server {
listen 80;
server_name google.com;
index index.php index.html;
####
# now pull the site from one directory #
root /var/www/www.google.com/web;
# done #
location = /favicon.ico {
log_not_found off;
access_log off;
}
}
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-08-19 17:32:15
Właściwie nawet nie trzeba przepisywać.
server {
#listen 80 is default
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
#listen 80 is default
server_name example.com;
## here goes the rest of your conf...
}
Jako, że moja odpowiedź jest coraz więcej głosów w górę, ale powyższe również. Nigdy nie powinieneś używać rewrite
w tym kontekście. Dlaczego? Ponieważ nginx musi przetworzyć i rozpocząć wyszukiwanie. Jeśli użyjesz return
(które powinno być dostępne w dowolnej wersji nginx), natychmiast zatrzymasz wykonanie. Jest to preferowane w każdym kontekście.
Przekierowanie obu, Nie-SSL I SSL do ich odpowiednika nie-www:
server {
listen 80;
listen 443 ssl;
server_name www.example.com;
ssl_certificate path/to/cert;
ssl_certificate_key path/to/key;
return 301 $scheme://example.com$request_uri;
}
server {
listen 80;
listen 443 ssl;
server_name example.com;
ssl_certificate path/to/cert;
ssl_certificate_key path/to/key;
# rest goes here...
}
Zmienna $scheme
będzie zawierać tylko http
jeśli twój serwer nasłuchuje tylko na porcie 80 (domyślnie) i opcja listen nie zawiera słowa kluczowego ssl
. Nieużywanie tej zmiennej nie zapewni Ci żadnej wydajności.
Zauważ, że potrzebujesz jeszcze więcej bloków serwera, jeśli używasz HSTS, ponieważ nagłówki HSTS nie powinny być wysyłane przez nieszyfrowane połączenia. Dlatego potrzebne są niezaszyfrowane bloki serwerów z przekierowaniami i zaszyfrowane bloki serwerów z przekierowaniami i nagłówkami HSTS.
Przekierowanie wszystkiego NA SSL (personal config on UNIX z IPv4, IPv6, SPDY, ...):
#
# Redirect all www to non-www
#
server {
server_name www.example.com;
ssl_certificate ssl/example.com/crt;
ssl_certificate_key ssl/example.com/key;
listen *:80;
listen *:443 ssl spdy;
listen [::]:80 ipv6only=on;
listen [::]:443 ssl spdy ipv6only=on;
return 301 https://example.com$request_uri;
}
#
# Redirect all non-encrypted to encrypted
#
server {
server_name example.com;
listen *:80;
listen [::]:80;
return 301 https://example.com$request_uri;
}
#
# There we go!
#
server {
server_name example.com;
ssl_certificate ssl/example.com/crt;
ssl_certificate_key ssl/example.com/key;
listen *:443 ssl spdy;
listen [::]:443 ssl spdy;
# rest goes here...
}
Myślę, że możesz sobie teraz wyobrazić inne związki z tym wzorem.
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-08-22 12:39:30
Może się okazać, że chcesz użyć tego samego config dla większej liczby domen.
Następujący fragment usuwa www przed dowolną domeną:
if ($host ~* ^www\.(.*)$) {
rewrite / $scheme://$1 permanent;
}
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-02-15 13:09:38
Oto Jak to zrobić dla wielu nazw serwerów www do no-www (użyłem tego dla subdomen):
server {
server_name
"~^www\.(sub1.example.com)$"
"~^www\.(sub2.example.com)$"
"~^www\.(sub3.example.com)$";
return 301 $scheme://$1$request_uri ;
}
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-12-10 17:00:29
Potrzebujesz dwóch bloków serwerowych.
Włóż je do swojego pliku konfiguracyjnego np /etc/nginx/sites-available/sitename
Powiedzmy, że zdecydujesz się na http://example.com jako główny adres do użycia.
Twój plik konfiguracyjny powinien wyglądać tak:
server {
listen 80;
listen [::]:80;
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
listen 80;
listen [::]:80;
server_name example.com;
# this is the main server block
# insert ALL other config or settings in this server block
}
Pierwszy blok serwera będzie zawierał instrukcje przekierowywania żądań z prefiksem 'www'. Nasłuchuje żądania adresu URL z prefiksem " www " i przekierowań.
Nie robi nic innego.Drugi blok serwera będzie przytrzymaj swój adres główny-adres URL, którego chcesz użyć. Wszystkie inne ustawienia przejdź tutaj jak root
, index
, location
, itd. Sprawdź domyślny plik dla tych innych ustawień, które możesz włączyć w bloku serwera.
Name: @ IPAddress: your-ip-address (for the example.com URL)
Name: www IPAddress: your-ip-address (for the www.example.com URL)
Dla ipv6 Utwórz parę rekordów AAAA używając adresu-ipv6.
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-06-18 02:07:53
To rozwiązanie pochodzi z mojego osobistego doświadczenia. Użyliśmy kilku łyżek Amazon S3 i jednego serwera do przekierowania non-www
do www
nazw domen, aby dopasować politykę nagłówka S3 "Host" .
Użyłem następującej konfiguracji dla serwera nginx:
server {
listen 80;
server_name ~^(?!www\.)(?<domain>.+)$;
return 301 $scheme://www.$domain$request_uri;
}
To pasuje do wszystkich nazw domen wskazywanych na serwer, zaczynając od whatever but www.
i przekierowując na www.<domain>
. W ten sam sposób można zrobić odwrotne przekierowanie z www
do non-www
.
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-10-16 15:44:33
Spróbuj tego
if ($host !~* ^www\.){
rewrite ^(.*)$ https://www.yoursite.com$1;
}
W inny sposób: Nginx no-www to www
server {
listen 80;
server_name yoursite.com;
root /path/;
index index.php;
return 301 https://www.yoursite.com$request_uri;
}
I www do no-www
server {
listen 80;
server_name www.yoursite.com;
root /path/;
index index.php;
return 301 https://yoursite.com$request_uri;
}
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-08-25 17:38:12
Unikalny format:
server {
listen 80;
server_name "~^www\.(.*)$" ;
return 301 https://$1$request_uri ;
}
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-02-19 16:01:47
Redirect non-www to www
Dla Pojedynczej Domeny:
server {
server_name example.com;
return 301 $scheme://www.example.com$request_uri;
}
Dla Wszystkich Domen:
server {
server_name "~^(?!www\.).*" ;
return 301 $scheme://www.$host$request_uri;
}
Redirect www to non-www Dla Pojedynczej Domeny:
server {
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
Dla Wszystkich Domen:
server {
server_name "~^www\.(.*)$" ;
return 301 $scheme://$1$request_uri ;
}
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-07-25 07:19:11
Połączyłem najlepsze ze wszystkich prostych odpowiedzi, bez zakodowanych domen.
301 stałe przekierowanie z nie-www do www (HTTP lub HTTPS):
server {
if ($host !~ ^www\.) {
rewrite ^ $scheme://www.$host$request_uri permanent;
}
# Regular location configs...
}
Jeśli wolisz non-HTTPS, non-www do HTTPS, www przekierowanie w tym samym czasie:
server {
listen 80;
if ($host !~ ^www\.) {
rewrite ^ https://www.$host$request_uri permanent;
}
rewrite ^ https://$host$request_uri permanent;
}
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-04-25 02:56:30
location / {
if ($http_host !~ "^www.domain.com"){
rewrite ^(.*)$ $scheme://www.domain.com/$1 redirect;
}
}
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-05-23 17:09:50
Nie wiem, czy ktoś zauważy, że może być poprawne zwrócenie 301, ale przeglądarki dławią się tym, że robią
rewrite ^(.*)$ https://yoursite.com$1;
Jest szybszy niż:
return 301 $scheme://yoursite.com$request_uri;
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-06-04 01:33:15
Ghost blog
Jeśli chcesz, aby nginx pracował z Ghostem, musisz dodać do swojego głównego bloku serwera:proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_pass_header X-CSRF-TOKEN;
proxy_buffering off;
proxy_redirect off;
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-11-15 15:58:51
if ($host ~* ^www.example.com$) {
return 301 $scheme://example.com$request_uri;
}
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-07-10 21:36:31
Jeśli masz problemy z uruchomieniem tego działania, może być konieczne dodanie adresu IP serwera. Na przykład:
server {
listen XXX.XXX.XXX.XXX:80;
listen XXX.XXX.XXX.XXX:443 ssl;
ssl_certificate /var/www/example.com/web/ssl/example.com.crt;
ssl_certificate_key /var/www/example.com/web/ssl/example.com.key;
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
Gdzie XXX. XXX. XXX. XXX To Adres IP (oczywiście).
UWAGA: Aby poprawnie przekierowywać żądania https
Nie zapomnij ponownie uruchomić nginx po wprowadzeniu zmian:]}service nginx restart
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
2013-10-28 21:36:36