Вступ

Директива rewrite в nginx — це один із найбільш потужних інструментів для управління URL-адресами, який дозволяє змінювати запити, що надходять до веб-сервера. Завдяки rewrite, адміністратори можуть перенаправляти користувачів на інші сторінки, створювати зручні URL-адреси, оптимізувати сайт для пошукових систем і вирішувати інші задачі, пов’язані з перенаправленням та обробкою запитів.
Як встановити  nginx на вашому сервері Ubuntu 22.04 та налаштувати фаєрвол ми розглядали в ось цій публікації.

Що Таке Директива rewrite?

Директива rewrite в Nginx дозволяє змінювати URL-адресу запиту на іншу, використовуючи регулярні вирази. Ця зміна може здійснюватися перед обробкою запиту сервером, перенаправляючи користувача на нову адресу або змінюючи шлях до файлу, який обробляється.

Основний синтаксис директиви виглядає так:

rewrite <regex> <replacement> [flag];
  • <regex>: Регулярний вираз, що визначає, які URL-адреси переписувати.
  • <replacement>: Нова URL-адреса або шлях, на який потрібно перенаправити запит.
  • [flag]: Додатковий параметр, який визначає, як саме оброблятиметься переписаний запит.

Основні Застосування rewrite

Перенаправлення запитів

Одним з основних використань rewrite є перенаправлення користувачів з одного URL на інший. Це особливо корисно, коли структура сайту змінюється, але необхідно зберегти доступ до старих сторінок.

rewrite ^/old-page$ /new-page permanent;

Створення SEO-дружніх URL

rewrite дозволяє змінювати складні URL-адреси на більш зрозумілі та короткі, що сприяє кращій індексації сайту в пошукових системах.

rewrite ^/products/([0-9]+)$ /product.php?id=$1 last;

Тут URL /products/123 буде переписаний на /product.php?id=123, де 123 — це ID продукту. Такий підхід покращує зручність користування сайтом і його SEO-показники.

Перенаправлення з HTTP на HTTPS

Щоб забезпечити безпеку сайту, можна використовувати rewrite для перенаправлення всього трафіку з HTTP на HTTPS.

server {
    listen 80;
    server_name example.com www.example.com;
    rewrite ^ https://$server_name$request_uri? permanent;
}

У цьому випадку всі запити, які надходять через HTTP, будуть автоматично перенаправлені на HTTPS.

Флаги в Директиві rewrite

Nginx пропонує кілька флагів для контролю поведінки переписування:

  • last: Завершує обробку директив rewrite і продовжує обробку запиту з новим URL.
  • break: Зупиняє обробку директив rewrite без подальшого перенаправлення запиту на новий URL.
  • redirect: Використовується для тимчасового перенаправлення з кодом HTTP 302.
  • permanent: Використовується для постійного перенаправлення з кодом HTTP 301.

Приклади використання rewrite в nginx

Ось кілька прикладів використання директиви rewrite в Nginx для різних сценаріїв.

Перенаправлення старих сторінок на нові

Коли URL-адреси сторінок змінюються, важливо зберегти доступ до старих сторінок через перенаправлення на нові.

server {
    listen 80;
    server_name example.com;

    location / {
        rewrite ^/old-page$ /new-page permanent;
    }
}

Пояснення: Запити на /old-page будуть перенаправлені на /new-page з кодом 301 (постійне перенаправлення).

Перенаправлення з HTTP на HTTPS

Для забезпечення безпеки сайту можна перенаправляти весь трафік з HTTP на HTTPS.

server {
    listen 80;
    server_name example.com www.example.com;

    rewrite ^ https://$server_name$request_uri? permanent;
}

Пояснення: Будь-який запит на http://example.com буде автоматично перенаправлений на https://example.com.

Переписування URL на піддомен

Іноді потрібно перенаправити певний контент на піддомен.

server {
    listen 80;
    server_name example.com;

    location /blog {
        rewrite ^/blog/(.*)$ http://blog.example.com/$1 permanent;
    }
}

Пояснення: Запити на example.com/blog/... будуть перенаправлені на blog.example.com/....

Перенаправлення користувачів залежно від мови

Перенаправлення користувачів на різні версії сайту в залежності від мови, використовуючи rewrite.

server {
    listen 80;
    server_name example.com;

    location / {
        rewrite ^/en/(.*)$ /index_en.php?page=$1 last;
        rewrite ^/fr/(.*)$ /index_fr.php?page=$1 last;
    }
}

Пояснення: Запити на /en/some-page будуть переписані на /index_en.php?page=some-page, а запити на /fr/some-page — на /index_fr.php?page=some-page.

Перенаправлення за IP-адресою

Наприклад, ви хочете перенаправляти всі запити з певного IP на сторінку з інформацією про заборону доступу.

server {
    listen 80;
    server_name example.com;

    location / {
        if ($remote_addr = 192.168.1.1) {
            rewrite ^(.*)$ /blocked.html last;
        }
    }
}

Пояснення: Якщо користувач заходить з IP-адреси 192.168.1.1, його буде перенаправлено на сторінку blocked.html.
Ці приклади демонструють різноманітні способи використання директиви rewrite в Nginx для різних задач. Це потужний інструмент для керування URL-адресами та забезпечення гнучкості в налаштуванні серверів.

Загальні помилки та їх виправлення

Використовуючи директиву rewrite, важливо бути обережним, щоб уникнути таких помилок:

  • Циклічні перенаправлення: Якщо правила переписування не налаштовані належним чином, це може призвести до циклічних перенаправлень, коли користувач постійно перенаправляється між одними й тими ж сторінками.
  • Неправильне використання регулярних виразів: Регулярні вирази повинні бути коректно налаштовані, інакше вони можуть збігатися з неправильними URL або не працювати взагалі.

Перед застосуванням змін на продуктивному сервері завжди тестуйте їх, використовуючи команду nginx -t, щоб переконатися у відсутності помилок у конфігурації.

Висновок

Директива rewrite в Nginx — це потужний і гнучкий інструмент, який дозволяє керувати URL-адресами і перенаправленнями на веб-сайті. Знання та правильне застосування цієї директиви дозволяє підвищити зручність користування сайтом, покращити його видимість у пошукових системах і забезпечити плавну роботу навіть після змін у структурі сайту. Завдяки rewrite адміністратори можуть ефективно керувати трафіком, забезпечуючи безперебійну роботу ресурсу та комфорт для користувачів.

Від ittutorials

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *