Навчальний посібник, щоб показати, як переспрямувати URL-адресу www на не-www, напр. www.example.com до example.com, з Nginx на unix.
Коли ваш веб-сайт або програма працює за доменом, часто бажано також дозволити користувачам доступ до нього через звичайне доменне ім’я та субдомен www. Тобто вони повинні мати можливість відвідувати ваш домен із «www» або без нього. префікс, напр. example.com або www.example.com, у веб-браузері, і буде представлено з тим самим вмістом. Хоча існує багато способів налаштувати це, найкращим рішенням з точки зору узгодженості та пошукової оптимізації є вибрати домен, який ви віддаєте перевагу, звичайний або www, і переспрямувати інший на потрібний домен. Цей тип перенаправлення називається постійним перенаправленням або «Permanent Redirect», і його можна легко налаштувати.
Щоб виконати 301 redirect, ви повинні додати новий блок сервера Nginx, який вказує на вихідний блок сервера. Відкрийте конфігурацію блоку сервера Nginx у редакторі. Ми додамо інший файл конфігурації в каталог Nginx include, /etc/nginx/conf.d
під назвою redirect.conf
sudo vi /etc/nginx/conf.d/redirect.conf
наш вихідний серверний блок уже має бути визначений. Залежно від того, в якому напрямку ви хочете переспрямувати, скористайтеся одним із наведених нижче варіантів.
Варіант 1: перенаправлення www на не-www
Якщо ви хочете переспрямовувати користувачів із www на звичайний домен без www, вставте цю конфігурацію:
server {
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
Зберегти та вийти. Це налаштовує Nginx на перенаправлення запитів з «www.example.com» на «example.com». Має бути інший серверний блок, який визначає ваш веб-сервер без www.
Щоб зміни вступили в силу, перезапустіть Nginx:
sudo systemctl restart nginx
Якщо ви використовуєте HTTPS, директива listen має бути встановлена на порт 443 замість 80. Використовуйте цю команду curl, щоб переконатися, що домен, відмінний від www, переспрямовує на домен www (замініть виділену частину на ваш справжній домен):
curl -I http://example.com
Ви повинні отримати відповідь 301 Moved Permanently
, яка показує місце переспрямування без www, ось так:
Output:
HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.6 (Ubuntu)
Date: Mon, 04 May 2015 18:20:19 GMT
Content-Type: text/html
Content-Length: 193
Connection: keep-alive
Location: http://example.com/
Звичайно, щоб бути впевненим, ви повинні отримати доступ до свого домену у веб-браузері (www і без www).
Варіант 2. Переспрямуйте не-www на www
Якщо ви хочете переспрямовувати користувачів із звичайного домену без www на домен www, додайте цей блок сервера:
server {
server_name example.com;
return 301 $scheme://www.example.com$request_uri;
}
Зберегти та вийти. Це налаштовує Nginx на перенаправлення запитів із «example.com» на «www.example.com». Зауважте, що має бути інший серверний блок, який визначає ваш веб-сервер www.
Щоб зміни вступили в силу, перезапустіть Nginx:
sudo systemctl restart nginx
Зауважте, що якщо ви використовуєте HTTPS, директива listen має бути встановлена на порт 443 замість 80. Використовуйте цю команду curl, щоб переконатися, що домен, відмінний від www, переспрямовує на домен www (замініть виділену частину на ваш справжній домен):
curl -I http://example.com
Ви повинні отримати відповідь 301 Moved Permanently, яка показує місце переспрямування www, ось так:
Output:
HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.6 (Ubuntu)
Date: Mon, 04 May 2015 18:20:19 GMT
Content-Type: text/html
Content-Length: 193
Connection: keep-alive
Location: http://www.example.com/