Перенос правил mod_rewrite из htaccess в nginx

Я пытаюсь преобразовать некоторые уже работающие правила перезаписи из .htaccess в nginx.
Мое приложение имеет 2 режима: backend (все вызовы начинаются с / admin / *) и frontend, остальные вызовы. Внутренние запросы направляются в admin.php, а внешние — в index.php.

Это прекрасно работает в apache, но в nginx я могу заставить работать только внешнюю маршрутизацию. / Admin / запросы вызывают файл admin.php, но файл php загружается, а не выполняется. Я уже использовал http://winginx.com преобразовать мои маршруты htaccess в nginx, но я до сих пор не могу заставить его работать для / admin.

Может ли nginx pro помочь мне с правильной конфигурацией для этого?

Это мой рабочий конфиг .htaccess:

<IfModule mod_rewrite.c>
#RewriteBase /

# Google sitemap.xml configuration
RewriteRule sitemap.xml$ /index.php?_extension=Frontend&_controller=Sitemap&action=googleSitemap [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)\.(\d+)\.(php|js|css|png|jpg|gif|gzip)$ $1.$3 [L]

# admin routes
RewriteRule ^/admin/(.*)$ admin.php?%{QUERY_STRING} [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

# frontend routes
RewriteRule .* index.php [L]

</IfModule>

и это конфигурация nginx, которую я пробовал до сих пор …

server {
listen       80;
server_name  mydomain.local;
root   /var/www/project;
index  index.php index.html index.htm;
access_log  /var/log/nginx/default-access.log  main;
error_log   /var/log/nginx/default-error.log;

error_page   500 502 503 504  /50x.html;

location = /50x.html {
root   /var/www/default;
}

location / {
rewrite sitemap.xml$ /index.php?_extension=Frontend&_controller=Sitemap&action=googleSitemap redirect;
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite ^(.*)$ /index.php;
}
location /admin {
rewrite ^/admin/(.*)$ /admin.php?$query_string break;
}

location ~ \.php {
include                  fastcgi_params;
fastcgi_keep_conn on;
fastcgi_index            index.php;
fastcgi_split_path_info  ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
fastcgi_pass unix:/var/run/php-fpm.sock;
}
}

с nginx, делая curl -s -D — ‘Http: //mydomain.local/frontend/call‘| голова -n 20 возвращает тип контента как text / html при вызове curl -s -D — ‘http://cms.dev/admin/whatever‘| голова -n 20 возвращает тип контента application / octet-stream, который запускает загрузку.

0

Решение

В конце концов я заменил Местонахождение / админ расстаться с этим, и все вызовы / admin кажутся обработанными должным образом. Я не уверен, что это лучший или оптимальный способ сделать это, но это работает …

location /admin {
try_files $uri $uri/ /admin.php?$query_string;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector