Nginx без www для www и www для no-www - PullRequest
470 голосов
/ 30 октября 2011

Я использую nginx в облаке Rackspace после урока и искал в сети, и пока не могу отсортировать его.

Я хочу, чтобы www.mysite.com пошел наmysite.com как обычно в .htaccess по SEO и другим причинам.

Мой / 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;
       }

Я тоже пробовал

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;
       }

Я тоже пробовал.Обе вторые попытки дают ошибки цикла перенаправления.

if ($host = 'www.example.com' ) {
rewrite ^ http://example.com$uri permanent;
}

Мой DNS настроен как стандарт:

site.com 192.192.6.8 A type at 300 seconds
www.site.com 192.192.6.8 A type at 300 seconds

(примеры IP-адресов и папок использовались в качестве примеров и помогали людям в будущем).Я использую Ubuntu 11.

Ответы [ 17 ]

8 голосов
/ 19 февраля 2015

Уникальный формат:

server {
  listen 80;
  server_name "~^www\.(.*)$" ;
  return 301 https://$1$request_uri ;
}
5 голосов
/ 23 мая 2016
location / { 
    if ($http_host !~ "^www.domain.com"){ 
        rewrite ^(.*)$ $scheme://www.domain.com/$1 redirect; 
    } 
}
3 голосов
/ 04 июня 2014

не уверен, если кто-то заметит, что может быть правильным возвращать 301, но браузеры давят на него, чтобы

rewrite ^(.*)$ https://yoursite.com$1; 

быстрее чем:

return 301 $scheme://yoursite.com$request_uri;
2 голосов
/ 15 ноября 2014

Блог Ghost

Для того, чтобы nginx рекомендовал метод с return 301 $scheme://example.com$request_uri; для работы с Ghost, вам необходимо добавить в свой блок главного сервера:

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;  
1 голос
/ 25 февраля 2019

Если вы не хотите жестко задавать имя домена, вы можете использовать этот блок перенаправления.Домен без ведущего www сохраняется как переменная $domain, которую можно повторно использовать в операторе перенаправления.

server {
    ...
    # Redirect www to non-www
    if ( $host ~ ^www\.(?<domain>.+) ) {
       rewrite ^/(.*)$ $scheme://$domain/$1;
    }
}

REF: Перенаправление субдомена с регулярным выражением в nginx

0 голосов
/ 11 июля 2016
if ($host ~* ^www.example.com$) {
    return 301 $scheme://example.com$request_uri;
}
0 голосов
/ 28 октября 2013

Если у вас возникли проблемы с этим, вам может потребоваться добавить IP-адрес вашего сервера.Например:

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;
}

, где XXX.XXX.XXX.XXX - IP-адрес (очевидно).

Примечание: ssl crt и местоположение ключа должны быть определены для правильного перенаправленияhttps запросы

Не забудьте перезапустить nginx после внесения изменений:

service nginx restart
...