nginx - как записать правило из .htaccess
Есть правила для apache:
RewriteEngine On
RewriteRule ^([^/\.]+)$ ?env=$1 [QSA,L]
RewriteRule ^([^/\.]+)/([^/\.]+)$ &controller=$2 [QSA,L]
RewriteRule ^([^/\.]+)/api/([^/]+)$ api/index.php?env=$1&method=$2 [QSA,L]
RewriteRule ^([^/\.]+)/ajax.php$ core/ajax.php?env=$1 [QSA,L]
AddDefaultCharset utf-8
Переводчик сделал так:
rewrite ^/([^/\.]+)$ /?env=$1 break;
rewrite ^/([^/\.]+)/([^/\.]+)$ /&controller=$2 break;
rewrite ^/([^/\.]+)/api/([^/]+)$ /api/index.php?env=$1&method=$2 break;
rewrite ^/([^/\.]+)/ajax.php$ /core/ajax.php?env=$1 break;
Но адрес https://hello.ru/privet/ajax.php отдает 404 Not Found А адрес https://hello.ru/privet/api/item.get отдает содержимое файла /api/index.php как текст...
Ответы (1 шт):
Автор решения: Danila Vershinin
→ Ссылка
Замените break на last. C last поиск начнётся заново и попадёт в нужный location ~ \.php$ {
И используя этот конвертер получаем:
server {
server_name example.com;
charset utf-8;
rewrite ^/([^/\.]+)$ /?env=$1 last;
rewrite ^/([^/\.]+)/([^/\.]+)$ /&controller=$2 last;
rewrite ^/([^/\.]+)/api/([^/]+)$ /api/index.php?env=$1&method=$2 last;
rewrite ^/([^/\.]+)/ajax.php$ /core/ajax.php?env=$1 last;
}