• ДОБРО ПОЖАЛОВАТЬ В КЛУБ ПО WORDPRESS

    Мы активно растущий клуб по WordPress и нам нужна помощь каждого человека, в том числе и Ваша! Не стесняйтесь и станьте частью большого сообщества.
    Мы делимся новостями, отытом и полезными советами! Пройдите простую регистрацию, чтобы пользоваться всеми возможностями нашего клуба.

    Присоединяйтесь к нам, вам обязательно понравится - Присоединится

Вопрос Как настроить правильно редирект на "/" в vps NGIX на Wordrpess?

ksandergoostaf

НОВИЧОК

ksandergoostaf

НОВИЧОК
Сообщения
5
Здравствуйте, переехали недавно на VPS и столкнулись с проблема настройки ngix конфигураций, нет опыта в этом, в htacess все было корректно.

Не разбираюсь в этом вообще, но сейчас из явного на сайте нет редиректа со всех страниц без слеша на слеш, пример: site.ru/category а нужно site.ru/category/, решение нашел, но оно ломает формы Contact form 7, видимо как-то json нужно исключать, решение было: (в консоле такие ошибки лезут и формы перестают работать: wp-json/contact-form-7/v1/contact-forms/3598/feedback/:1
Failed to load resource: the server responded with a status of 404 ())


Код:
if (!-f $request_filename) {
        rewrite ^(.*[^/])$ $1/ permanent;
   }

у нас кажется раньше было что-то такое в htacess, если не ошибаюсь этот, он как раз формы не ломал:
кажется json этот и отвечает за формы, но как это сделать для vps я не знаю


Код:
<IfModule mod_rewrite.c>
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_URI} !^/wp-json
  RewriteCond %{REQUEST_URI} !^/wp-admin
  RewriteCond %{REQUEST_URI} !^/([_0-9a-zA-Z-]+)/wp-json
  RewriteCond %{REQUEST_URI} !^/([_0-9a-zA-Z-]+)/wp-admin
  RewriteRule ^([^.]+)([^./])$ %{REQUEST_URI}/ [L,R=301,NE]
</IfModule>

Сейчас у нас такой файл настроил специалист, без редиректа:

Код:
server {
    server_name site.ru www.site.ru  ;


    listen 45.130.42.228:443 ssl;
    

    ssl_certificate "/var/www/httpd-cert/site.ru_2024-04-26-20-58_20.crt";
    ssl_certificate_key "/var/www/httpd-cert/site.ru_2024-04-26-20-58_20.key";
    add_header Strict-Transport-Security "max-age=31536000" always;


    http2 on;

    charset utf-8;

    gzip on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/css text/xml application/javascript text/plain application/json image/svg+xml image/x-icon;
    gzip_comp_level 6;

    set $root_path /var/www/site_ru_usr/data/www/site.ru;
    root $root_path;
    disable_symlinks if_not_owner from=$root_path;
    

    location / {
        index index.php index.html;
        try_files $uri $uri/ /index.php?$args;
    }


    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
     }


    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpeg|avi|zip|gz|bz2|rar|swf|ico|7z|doc|docx|map|ogg|otf|pdf|tff|tif|txt|wav|webp|woff|woff2|xls|xlsx|xml)$ {
        try_files $uri $uri/ /index.php?$args;
        expires 365d;
    }

    location @fallback {
        fastcgi_pass unix:/var/run/site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

    include "/etc/nginx/fastpanel2-sites/site_ru_usr/site.ru.includes";
    include /etc/nginx/fastpanel2-includes/*.conf;


    error_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.error.log;
    access_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.access.log;
}


server {
    server_name site.ru www.site.ru  ;
    listen 11.111.11.111:10;
    return 301 https://$host$request_uri;


    error_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.error.log;
    access_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.access.log;
}
 

edgars2212

СВОЙ

edgars2212

СВОЙ
Сообщения
418
Здравствуйте, переехали недавно на VPS и столкнулись с проблема настройки ngix конфигураций, нет опыта в этом, в htacess все было корректно.

Не разбираюсь в этом вообще, но сейчас из явного на сайте нет редиректа со всех страниц без слеша на слеш, пример: site.ru/category а нужно site.ru/category/, решение нашел, но оно ломает формы Contact form 7, видимо как-то json нужно исключать, решение было: (в консоле такие ошибки лезут и формы перестают работать: wp-json/contact-form-7/v1/contact-forms/3598/feedback/:1
Failed to load resource: the server responded with a status of 404 ())


Код:
if (!-f $request_filename) {
        rewrite ^(.*[^/])$ $1/ permanent;
   }

у нас кажется раньше было что-то такое в htacess, если не ошибаюсь этот, он как раз формы не ломал:
кажется json этот и отвечает за формы, но как это сделать для vps я не знаю


Код:
<IfModule mod_rewrite.c>
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_URI} !^/wp-json
  RewriteCond %{REQUEST_URI} !^/wp-admin
  RewriteCond %{REQUEST_URI} !^/([_0-9a-zA-Z-]+)/wp-json
  RewriteCond %{REQUEST_URI} !^/([_0-9a-zA-Z-]+)/wp-admin
  RewriteRule ^([^.]+)([^./])$ %{REQUEST_URI}/ [L,R=301,NE]
</IfModule>

Сейчас у нас такой файл настроил специалист, без редиректа:

Код:
server {
    server_name site.ru www.site.ru  ;


    listen 45.130.42.228:443 ssl;
   

    ssl_certificate "/var/www/httpd-cert/site.ru_2024-04-26-20-58_20.crt";
    ssl_certificate_key "/var/www/httpd-cert/site.ru_2024-04-26-20-58_20.key";
    add_header Strict-Transport-Security "max-age=31536000" always;


    http2 on;

    charset utf-8;

    gzip on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/css text/xml application/javascript text/plain application/json image/svg+xml image/x-icon;
    gzip_comp_level 6;

    set $root_path /var/www/site_ru_usr/data/www/site.ru;
    root $root_path;
    disable_symlinks if_not_owner from=$root_path;
   

    location / {
        index index.php index.html;
        try_files $uri $uri/ /index.php?$args;
    }


    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
     }


    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpeg|avi|zip|gz|bz2|rar|swf|ico|7z|doc|docx|map|ogg|otf|pdf|tff|tif|txt|wav|webp|woff|woff2|xls|xlsx|xml)$ {
        try_files $uri $uri/ /index.php?$args;
        expires 365d;
    }

    location @fallback {
        fastcgi_pass unix:/var/run/site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

    include "/etc/nginx/fastpanel2-sites/site_ru_usr/site.ru.includes";
    include /etc/nginx/fastpanel2-includes/*.conf;


    error_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.error.log;
    access_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.access.log;
}


server {
    server_name site.ru www.site.ru  ;
    listen 11.111.11.111:10;
    return 301 https://$host$request_uri;


    error_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.error.log;
    access_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.access.log;
}

Привет! Вижу, что проблема с редиректом на слеш действительно требует аккуратного подхода, особенно когда речь идет о Contact Form 7 и JSON-запросах. Давайте решим вашу задачу.

Для Nginx можно настроить редирект, который не будет ломать запросы к REST API WordPress, добавив исключение для wp-json. Вот пример обновленного конфигурационного файла:

Обновленный блок конфигурации для Nginx:
NGINX:
server {
    server_name site.ru www.site.ru;

    listen 45.130.42.228:443 ssl;

    ssl_certificate "/var/www/httpd-cert/site.ru_2024-04-26-20-58_20.crt";
    ssl_certificate_key "/var/www/httpd-cert/site.ru_2024-04-26-20-58_20.key";
    add_header Strict-Transport-Security "max-age=31536000" always;

    http2 on;

    charset utf-8;

    gzip on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/css text/xml application/javascript text/plain application/json image/svg+xml image/x-icon;
    gzip_comp_level 6;

    set $root_path /var/www/site_ru_usr/data/www/site.ru;
    root $root_path;
    disable_symlinks if_not_owner from=$root_path;

    # Основной редирект на слеш, исключая REST API и wp-admin
    location ~ ^(?!/wp-json|/wp-admin)(.*[^/])$ {
        return 301 $1/;
    }

    location / {
        index index.php index.html;
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
    }

    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpeg|avi|zip|gz|bz2|rar|swf|ico|7z|doc|docx|map|ogg|otf|pdf|tff|tif|txt|wav|webp|woff|woff2|xls|xlsx|xml)$ {
        try_files $uri $uri/ /index.php?$args;
        expires 365d;
    }

    location @fallback {
        fastcgi_pass unix:/var/run/site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

    include "/etc/nginx/fastpanel2-sites/site_ru_usr/site.ru.includes";
    include /etc/nginx/fastpanel2-includes/*.conf;

    error_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.error.log;
    access_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.access.log;
}

server {
    server_name site.ru www.site.ru;
    listen 11.111.11.111:10;
    return 301 https://$host$request_uri;

    error_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.error.log;
    access_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.access.log;
}
Разбор изменений:
  1. Редирект с исключениями:
NGINX:
location ~ ^(?!/wp-json|/wp-admin)(.*[^/])$ {
    return 301 $1/;
}
    • Это правило позволяет избежать редиректа для запросов к REST API (/wp-json) и административной панели (/wp-admin).
  1. Исключение JSON-запросов: REST API WordPress (wp-json) часто используется Contact Form 7, и редирект ломает его работу. Исключение решает эту проблему.
  2. Безопасность: Строгие правила для других запросов остались неизменными.
После внесения изменений перезагрузите Nginx, чтобы применить конфигурацию:

Bash:
sudo nginx -t && sudo systemctl reload nginx
Если что-то пойдет не так — пишите, разберемся!
 

ksandergoostaf

НОВИЧОК

ksandergoostaf

НОВИЧОК
Сообщения
5
Привет! Вижу, что проблема с редиректом на слеш действительно требует аккуратного подхода, особенно когда речь идет о Contact Form 7 и JSON-запросах. Давайте решим вашу задачу.

Для Nginx можно настроить редирект, который не будет ломать запросы к REST API WordPress, добавив исключение для wp-json. Вот пример обновленного конфигурационного файла:

Обновленный блок конфигурации для Nginx:
NGINX:
server {
    server_name site.ru www.site.ru;

    listen 45.130.42.228:443 ssl;

    ssl_certificate "/var/www/httpd-cert/site.ru_2024-04-26-20-58_20.crt";
    ssl_certificate_key "/var/www/httpd-cert/site.ru_2024-04-26-20-58_20.key";
    add_header Strict-Transport-Security "max-age=31536000" always;

    http2 on;

    charset utf-8;

    gzip on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/css text/xml application/javascript text/plain application/json image/svg+xml image/x-icon;
    gzip_comp_level 6;

    set $root_path /var/www/site_ru_usr/data/www/site.ru;
    root $root_path;
    disable_symlinks if_not_owner from=$root_path;

    # Основной редирект на слеш, исключая REST API и wp-admin
    location ~ ^(?!/wp-json|/wp-admin)(.*[^/])$ {
        return 301 $1/;
    }

    location / {
        index index.php index.html;
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
    }

    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpeg|avi|zip|gz|bz2|rar|swf|ico|7z|doc|docx|map|ogg|otf|pdf|tff|tif|txt|wav|webp|woff|woff2|xls|xlsx|xml)$ {
        try_files $uri $uri/ /index.php?$args;
        expires 365d;
    }

    location @fallback {
        fastcgi_pass unix:/var/run/site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

    include "/etc/nginx/fastpanel2-sites/site_ru_usr/site.ru.includes";
    include /etc/nginx/fastpanel2-includes/*.conf;

    error_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.error.log;
    access_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.access.log;
}

server {
    server_name site.ru www.site.ru;
    listen 11.111.11.111:10;
    return 301 https://$host$request_uri;

    error_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.error.log;
    access_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.access.log;
}
Разбор изменений:
  1. Редирект с исключениями:
NGINX:
location ~ ^(?!/wp-json|/wp-admin)(.*[^/])$ {
    return 301 $1/;
}
    • Это правило позволяет избежать редиректа для запросов к REST API (/wp-json) и административной панели (/wp-admin).
  1. Исключение JSON-запросов: REST API WordPress (wp-json) часто используется Contact Form 7, и редирект ломает его работу. Исключение решает эту проблему.
  2. Безопасность: Строгие правила для других запросов остались неизменными.
После внесения изменений перезагрузите Nginx, чтобы применить конфигурацию:

Bash:
sudo nginx -t && sudo systemctl reload nginx
Если что-то пойдет не так — пишите, разберемся!

Здравствуйте, большое спасибо за помощь, к сожалению данный код ломает сайт, пишет:

"Сайт siter.ru выполнил переадресацию слишком много раз."
 

edgars2212

СВОЙ

edgars2212

СВОЙ
Сообщения
418
Здравствуйте, большое спасибо за помощь, к сожалению данный код ломает сайт, пишет:

"Сайт siter.ru выполнил переадресацию слишком много раз."

Ошибка "Сайт выполнил переадресацию слишком много раз" возникает из-за зацикливания редиректов. Это происходит, если правило редиректа неправильно обрабатывает уже перенаправленные запросы. Давайте исправим конфигурацию и сделаем её более стабильной.

Вот обновленный блок конфигурации, который устраняет проблему с бесконечной переадресацией:

Обновленный блок конфигурации Nginx:
NGINX:
server {
    server_name site.ru www.site.ru;

    listen 45.130.42.228:443 ssl;

    ssl_certificate "/var/www/httpd-cert/site.ru_2024-04-26-20-58_20.crt";
    ssl_certificate_key "/var/www/httpd-cert/site.ru_2024-04-26-20-58_20.key";
    add_header Strict-Transport-Security "max-age=31536000" always;

    http2 on;

    charset utf-8;

    gzip on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/css text/xml application/javascript text/plain application/json image/svg+xml image/x-icon;
    gzip_comp_level 6;

    set $root_path /var/www/site_ru_usr/data/www/site.ru;
    root $root_path;
    disable_symlinks if_not_owner from=$root_path;

    # Редирект, исключая wp-json и wp-admin
    location ~ ^(?!/wp-json|/wp-admin)(.*[^/])$ {
        # Проверяем, не заканчивается ли URI на слеш
        if ($request_uri !~ /$) {
            return 301 $scheme://$host$1/;
        }
    }

    location / {
        index index.php index.html;
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
    }

    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpeg|avi|zip|gz|bz2|rar|swf|ico|7z|doc|docx|map|ogg|otf|pdf|tff|tif|txt|wav|webp|woff|woff2|xls|xlsx|xml)$ {
        try_files $uri $uri/ /index.php?$args;
        expires 365d;
    }

    location @fallback {
        fastcgi_pass unix:/var/run/site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

    include "/etc/nginx/fastpanel2-sites/site_ru_usr/site.ru.includes";
    include /etc/nginx/fastpanel2-includes/*.conf;

    error_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.error.log;
    access_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.access.log;
}

server {
    server_name site.ru www.site.ru;
    listen 11.111.11.111:10;
    return 301 https://$host$request_uri;

    error_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.error.log;
    access_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.access.log;
}
Что изменено:

  1. Условие для исключения зацикливания:
    NGINX:
    if ($request_uri !~ /$) {
        return 301 $scheme://$host$1/;
    }
  2. Здесь проверяется, заканчивается ли URI на /. Если нет, то добавляется слеш. Это предотвращает повторную обработку уже перенаправленных запросов.
  3. Обработка /wp-json и /wp-admin: Исключения остались неизменными, чтобы не ломать REST API и административную панель.
  4. Гибкость для остальных запросов: Обработка статических файлов и php-скриптов оставлена без изменений.
 

edgars2212

СВОЙ

edgars2212

СВОЙ
Сообщения
418
Здравствуйте, переехали недавно на VPS и столкнулись с проблема настройки ngix конфигураций, нет опыта в этом, в htacess все было корректно.

Не разбираюсь в этом вообще, но сейчас из явного на сайте нет редиректа со всех страниц без слеша на слеш, пример: site.ru/category а нужно site.ru/category/, решение нашел, но оно ломает формы Contact form 7, видимо как-то json нужно исключать, решение было: (в консоле такие ошибки лезут и формы перестают работать: wp-json/contact-form-7/v1/contact-forms/3598/feedback/:1
Failed to load resource: the server responded with a status of 404 ())


Код:
if (!-f $request_filename) {
        rewrite ^(.*[^/])$ $1/ permanent;
   }

у нас кажется раньше было что-то такое в htacess, если не ошибаюсь этот, он как раз формы не ломал:
кажется json этот и отвечает за формы, но как это сделать для vps я не знаю


Код:
<IfModule mod_rewrite.c>
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_URI} !^/wp-json
  RewriteCond %{REQUEST_URI} !^/wp-admin
  RewriteCond %{REQUEST_URI} !^/([_0-9a-zA-Z-]+)/wp-json
  RewriteCond %{REQUEST_URI} !^/([_0-9a-zA-Z-]+)/wp-admin
  RewriteRule ^([^.]+)([^./])$ %{REQUEST_URI}/ [L,R=301,NE]
</IfModule>

Сейчас у нас такой файл настроил специалист, без редиректа:

Код:
server {
    server_name site.ru www.site.ru  ;


    listen 45.130.42.228:443 ssl;
   

    ssl_certificate "/var/www/httpd-cert/site.ru_2024-04-26-20-58_20.crt";
    ssl_certificate_key "/var/www/httpd-cert/site.ru_2024-04-26-20-58_20.key";
    add_header Strict-Transport-Security "max-age=31536000" always;


    http2 on;

    charset utf-8;

    gzip on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/css text/xml application/javascript text/plain application/json image/svg+xml image/x-icon;
    gzip_comp_level 6;

    set $root_path /var/www/site_ru_usr/data/www/site.ru;
    root $root_path;
    disable_symlinks if_not_owner from=$root_path;
   

    location / {
        index index.php index.html;
        try_files $uri $uri/ /index.php?$args;
    }


    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
     }


    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpeg|avi|zip|gz|bz2|rar|swf|ico|7z|doc|docx|map|ogg|otf|pdf|tff|tif|txt|wav|webp|woff|woff2|xls|xlsx|xml)$ {
        try_files $uri $uri/ /index.php?$args;
        expires 365d;
    }

    location @fallback {
        fastcgi_pass unix:/var/run/site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

    include "/etc/nginx/fastpanel2-sites/site_ru_usr/site.ru.includes";
    include /etc/nginx/fastpanel2-includes/*.conf;


    error_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.error.log;
    access_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.access.log;
}


server {
    server_name site.ru www.site.ru  ;
    listen 11.111.11.111:10;
    return 301 https://$host$request_uri;


    error_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.error.log;
    access_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.access.log;
}

Для настройки редиректа без слеша на слеш в Nginx, при этом не ломая REST API WordPress, можно использовать исключения для запросов к /wp-json и /wp-admin. Вот скорректированная конфигурация, которая добавляет слеш для всех страниц, кроме REST API и административной панели, и не ломает работу Contact Form 7:

Исправленный файл конфигурации Nginx:
NGINX:
server {
    server_name site.ru www.site.ru;

    listen 45.130.42.228:443 ssl;

    ssl_certificate "/var/www/httpd-cert/site.ru_2024-04-26-20-58_20.crt";
    ssl_certificate_key "/var/www/httpd-cert/site.ru_2024-04-26-20-58_20.key";
    add_header Strict-Transport-Security "max-age=31536000" always;

    http2 on;

    charset utf-8;

    gzip on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/css text/xml application/javascript text/plain application/json image/svg+xml image/x-icon;
    gzip_comp_level 6;

    set $root_path /var/www/site_ru_usr/data/www/site.ru;
    root $root_path;
    disable_symlinks if_not_owner from=$root_path;

    # Редирект без слеша на слеш, исключая REST API и админку
    location ~ ^(?!/wp-json|/wp-admin)(.*[^/])$ {
        return 301 $scheme://$host$1/;
    }

    location / {
        index index.php index.html;
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
    }

    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpeg|avi|zip|gz|bz2|rar|swf|ico|7z|doc|docx|map|ogg|otf|pdf|tff|tif|txt|wav|webp|woff|woff2|xls|xlsx|xml)$ {
        try_files $uri $uri/ /index.php?$args;
        expires 365d;
    }

    location @fallback {
        fastcgi_pass unix:/var/run/site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

    include "/etc/nginx/fastpanel2-sites/site_ru_usr/site.ru.includes";
    include /etc/nginx/fastpanel2-includes/*.conf;

    error_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.error.log;
    access_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.access.log;
}

server {
    server_name site.ru www.site.ru;
    listen 11.111.11.111:10;
    return 301 https://$host$request_uri;

    error_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.error.log;
    access_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.access.log;
}
Объяснение изменений:
  1. Редирект со страниц без слеша на слеш:
NGINX:
location ~ ^(?!/wp-json|/wp-admin)(.*[^/])$ {
    return 301 $scheme://$host$1/;
}
  • Это правило исключает из редиректа запросы к /wp-json и /wp-admin, которые необходимы для работы REST API и административной панели.
  • Сохранение текущей обработки PHP, статических файлов и основных настроек: Все остальные части конфигурации остались без изменений.
  • Гибкость исключений: Можно расширить исключения, если вы добавите другие пути, которые не должны редиректиться (например, для AJAX-запросов плагинов).
После этого редирект должен работать корректно, не ломая Contact Form 7 и REST API. Если проблема останется, напишите, и мы уточним детали!
 

ksandergoostaf

НОВИЧОК

ksandergoostaf

НОВИЧОК
Сообщения
5
P
Ошибка "Сайт выполнил переадресацию слишком много раз" возникает из-за зацикливания редиректов. Это происходит, если правило редиректа неправильно обрабатывает уже перенаправленные запросы. Давайте исправим конфигурацию и сделаем её более стабильной.

Вот обновленный блок конфигурации, который устраняет проблему с бесконечной переадресацией:

Обновленный блок конфигурации Nginx:
NGINX:
server {
    server_name site.ru www.site.ru;

    listen 45.130.42.228:443 ssl;

    ssl_certificate "/var/www/httpd-cert/site.ru_2024-04-26-20-58_20.crt";
    ssl_certificate_key "/var/www/httpd-cert/site.ru_2024-04-26-20-58_20.key";
    add_header Strict-Transport-Security "max-age=31536000" always;

    http2 on;

    charset utf-8;

    gzip on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/css text/xml application/javascript text/plain application/json image/svg+xml image/x-icon;
    gzip_comp_level 6;

    set $root_path /var/www/site_ru_usr/data/www/site.ru;
    root $root_path;
    disable_symlinks if_not_owner from=$root_path;

    # Редирект, исключая wp-json и wp-admin
    location ~ ^(?!/wp-json|/wp-admin)(.*[^/])$ {
        # Проверяем, не заканчивается ли URI на слеш
        if ($request_uri !~ /$) {
            return 301 $scheme://$host$1/;
        }
    }

    location / {
        index index.php index.html;
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
    }

    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpeg|avi|zip|gz|bz2|rar|swf|ico|7z|doc|docx|map|ogg|otf|pdf|tff|tif|txt|wav|webp|woff|woff2|xls|xlsx|xml)$ {
        try_files $uri $uri/ /index.php?$args;
        expires 365d;
    }

    location @fallback {
        fastcgi_pass unix:/var/run/site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

    include "/etc/nginx/fastpanel2-sites/site_ru_usr/site.ru.includes";
    include /etc/nginx/fastpanel2-includes/*.conf;

    error_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.error.log;
    access_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.access.log;
}

server {
    server_name site.ru www.site.ru;
    listen 11.111.11.111:10;
    return 301 https://$host$request_uri;

    error_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.error.log;
    access_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.access.log;
}
Что изменено:

  1. Условие для исключения зацикливания:
    NGINX:
    if ($request_uri !~ /$) {
    return 301 $scheme://$host$1/;
    }
  2. Здесь проверяется, заканчивается ли URI на /. Если нет, то добавляется слеш. Это предотвращает повторную обработку уже перенаправленных запросов.
  3. Обработка /wp-json и /wp-admin: Исключения остались неизменными, чтобы не ломать REST API и административную панель.
  4. Гибкость для остальных запросов: Обработка статических файлов и php-скриптов оставлена без изменений.
Здравствуйте, к сожалению этот вариант сайт открывается, но вылазит окно сохранения и скачивается какой-то файл каждый раз.
 

ksandergoostaf

НОВИЧОК

ksandergoostaf

НОВИЧОК
Сообщения
5
Для настройки редиректа без слеша на слеш в Nginx, при этом не ломая REST API WordPress, можно использовать исключения для запросов к /wp-json и /wp-admin. Вот скорректированная конфигурация, которая добавляет слеш для всех страниц, кроме REST API и административной панели, и не ломает работу Contact Form 7:

Исправленный файл конфигурации Nginx:
NGINX:
server {
    server_name site.ru www.site.ru;

    listen 45.130.42.228:443 ssl;

    ssl_certificate "/var/www/httpd-cert/site.ru_2024-04-26-20-58_20.crt";
    ssl_certificate_key "/var/www/httpd-cert/site.ru_2024-04-26-20-58_20.key";
    add_header Strict-Transport-Security "max-age=31536000" always;

    http2 on;

    charset utf-8;

    gzip on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/css text/xml application/javascript text/plain application/json image/svg+xml image/x-icon;
    gzip_comp_level 6;

    set $root_path /var/www/site_ru_usr/data/www/site.ru;
    root $root_path;
    disable_symlinks if_not_owner from=$root_path;

    # Редирект без слеша на слеш, исключая REST API и админку
    location ~ ^(?!/wp-json|/wp-admin)(.*[^/])$ {
        return 301 $scheme://$host$1/;
    }

    location / {
        index index.php index.html;
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
    }

    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpeg|avi|zip|gz|bz2|rar|swf|ico|7z|doc|docx|map|ogg|otf|pdf|tff|tif|txt|wav|webp|woff|woff2|xls|xlsx|xml)$ {
        try_files $uri $uri/ /index.php?$args;
        expires 365d;
    }

    location @fallback {
        fastcgi_pass unix:/var/run/site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

    include "/etc/nginx/fastpanel2-sites/site_ru_usr/site.ru.includes";
    include /etc/nginx/fastpanel2-includes/*.conf;

    error_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.error.log;
    access_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.access.log;
}

server {
    server_name site.ru www.site.ru;
    listen 11.111.11.111:10;
    return 301 https://$host$request_uri;

    error_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.error.log;
    access_log /var/www/site_ru_usr/data/logs/meshar.ru-frontend.access.log;
}
Объяснение изменений:
  1. Редирект со страниц без слеша на слеш:
NGINX:
location ~ ^(?!/wp-json|/wp-admin)(.*[^/])$ {
    return 301 $scheme://$host$1/;
}
  • Это правило исключает из редиректа запросы к /wp-json и /wp-admin, которые необходимы для работы REST API и административной панели.
  • Сохранение текущей обработки PHP, статических файлов и основных настроек: Все остальные части конфигурации остались без изменений.
  • Гибкость исключений: Можно расширить исключения, если вы добавите другие пути, которые не должны редиректиться (например, для AJAX-запросов плагинов).
После этого редирект должен работать корректно, не ломая Contact Form 7 и REST API. Если проблема останется, напишите, и мы уточним детали!
А этот вариант ломает также сайт и пишет, что выполнил слишком много редиректов.
 

Топ поддержки


Сверху