Я перехожу из Apache в Nginx. У меня проблема с преобразованием правил перезаписи Apache в правила nginx. То, что я пытаюсь преобразовать:Nginx + rewrite + php-fpm = путаница
RewriteRule ^$ www/controller.php?_url_=index [QSA,L]
RewriteRule ^/+$ www/controller.php?_url_=index [QSA,L]
RewriteRule ^([a-zA-Z0-9_]+)(/([a-zA-Z0-9_/]*))?$ www/controller.php?_url_=$1&_req_=$2 [QSA,L]
RewriteRule ^([a-zA-Z0-9/]+)controller.php?(.*)$ www/controller.php?$2 [QSA,L]
То, что я пытался использовать:
rewrite ^/$ /www/controller.php?_url_=index break;
rewrite ^/+$ /www/controller.php?_url_=index break;
rewrite ^/([a-zA-Z0-9_]+)(/([a-zA-Z0-9_]*))?$ /www/controller.php?_url_=$1&_req_=$2 break;
rewrite ^/([a-zA-Z0-9/]+)controller.php?(.*)$ /www/controller.php?$2 break;
Если я использую выше правил мой браузер загружает файл PHP (сервер не выполняет его) - я понял, что это не передается PHP-FPM. Где-то я обнаружил, что должен заменить «break»; с «последним»; как:
rewrite ^/$ /www/controller.php?_url_=index last;
После замены этого еще я скачивание файла PHP из http://example.org, но когда я посещаю http://example.org/login я получаю в бесконечный цикл. Я читал документацию nginx и другие примеры (также здесь, в StackOverflow), но я не могу найти правильную конфигурацию. Может ли кто-нибудь указать мне в правильном направлении?
Вот весь мой конфигурационный файл:
server {
listen 80;
server_name 10.10.100.172;
error_log /var/log/nginx/example.com.error.log debug;
rewrite_log on;
location/{
root /var/www/webs;
index index.php index.html index.htm;
rewrite ^/$ /www/controller.php?_url_=index last;
rewrite ^/+$ /www/controller.php?_url_=index last;
rewrite ^/([a-zA-Z0-9_]+)(/([a-zA-Z0-9_]*))?$ /www/controller.php?_url_=$1&_req_=$2 last;
rewrite ^/([a-zA-Z0-9/]+)controller.php?(.*)$ /www/controller.php?$2 last;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
root /var/www/webs;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
EDIT:
я переехал правила за пределами сегмента местоположения и используется "перерыв"; в конце каждого правила. Я могу достичь /www/controller.php? url = login & req =/Когда я иду к example.org/login/ - controller.php отвечал за бесконечный цикл. Когда я пытаюсь найти example.org или example.org/, я загружаю файл controller.php - как будто он не передается PHP-FPM. Любая догадка?
для ответа :) –