2014-01-27 2 views
0

Я перехожу из 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. Любая догадка?

ответ

2

Я использовал выше правила вне сегмента сегмента, и он работает! Я пробовал просматривать мою страницу в другом браузере, и все было в порядке. Я всегда забываю об удалении кеша.

+0

для ответа :) –