Espritto
@Espritto

Как конвертировать правило rewrite с htaccess в nginx?

Задача вроде бы простая, но очень давно не настраивал сервера и никак не могу сообразить. Перевожу сайт на PHP на другой сервер, но там нужно использовать Nginx вместо Apache. В директориях накидано много файлов .htaccess с таким содержанием:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?q=$1 [L,QSA]


Например, public_html/api/v2/.htaccess и в этой же директории лежит index.php на который должно редиректится все, что приходит по одноименному урлу.

Сейчас конфиг Nginx у меня выглядит примерно вот так:
server {
        listen       443 ssl;
        server_name  site.io;
        access_log  off;
        
        ssl_certificate      "/var/node/********.crt";
        ssl_certificate_key  "/var/node/********.key";


        location / {
            root   /var/www/service/public_html;
            index  index.php index.html index.htm;
        }

        location /api/v2 {
            rewrite ^(.+)$ /api/v2/index.php?q=$1;
        }

        location ~ \.php$ {
            root           /var/www/service/public_html;
            fastcgi_pass   127.0.0.1:9001;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }


Должен сработать запрос https://site.io/api/v2/dashboard?dateFrom=2020-02-... но он возвращает ошибку 404.
Что нужно поменять в конфиге чтобы этот запрос сработал?
  • Вопрос задан
  • 176 просмотров
Решения вопроса 1
@dodo512
server {
        listen       443 ssl;
        server_name  site.io;
        access_log  off;
        
        ssl_certificate      "/var/node/********.crt";
        ssl_certificate_key  "/var/node/********.key";

        root   /var/www/service/public_html;

        location / {
            index  index.php index.html index.htm;
        }

        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9001;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

        location ~ ^/api/v2/(.+) {
            try_files $uri /api/v2/index.php?q=$1&$args;
        }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы