0

У меня возникли проблемы с созданием правила перезаписи, которое соответствует моему .htaccess на Nginx, я надеюсь, что кто-то может указать мне в правильном направлении.Nginx Rewrite Несколько параметров запроса

Мой .htaccess

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond $1 !^(index\.php|robots\.txt|app|assets|upload|api) 
RewriteRule ^([^/]+)(?:/([^/]+)|)(?:/([^/]+)|)(?:/([^/]+)|) index.php?class=$1&action=$2&param=$3 [L] 

Моя конфигурация Nginx

location/{ 
    rewrite ^/([^/]+)(?:/([^/]+)|)(?:/([^/]+)|)(?:/([^/]+)|) /index.php?class=$1&action=$2&param=$3 break; 
} 

Параметры запроса являются необязательными, например:

site.com/ 
site.com/customers 
site.com/customers/add 
site.com/customers/edit/1 

Я не могу переписать код приложения начиная с РМКО только мигрирующие из апача к nginx.

Любая помощь будет оценена по достоинству.

Спасибо.

ответ

0

Вы можете структурировать решение так:

root /path/to/root; 
index index.php; 

location/{ 
    try_files $uri $uri/ @rewrite; 
} 
location @rewrite { 
    rewrite ^/([^/]+)(?:/([^/]+)|)(?:/([^/]+)|)(?:/([^/]+)|) /index.php?class=$1&action=$2&param=$3 last; 
    return 404; 
} 
location ~ \.php$ { 
    try_files $uri =404; 

    # fastcgi stuff 
} 

Я не проверил ваше регулярное выражение. Директива try_files - documented here.