2014-01-27 51 views
0

我正在從Apache移植到Nginx。我將Apache重寫規則轉換爲nginx規則時遇到了問題。我試圖轉換:Nginx +重寫+ 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。我發現我應該取代「休息」;與「最後」;像:

rewrite ^/$ /www/controller.php?_url_=index last; 

http://example.org更換這還是我下載的PHP文件後,但是當我訪問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; 
} 

}

編輯:

我感動的位置段以外的規則,並用 「破」;在每個規則的末尾。我可以訪問/www/controller.php? url =登錄& req = /當我去example.org/login/ - controller.php負責無限循環。當我嘗試訪問example.org或example.org/時,我正在下載controller.php文件 - 就像它沒有傳遞給PHP-FPM一樣。任何猜測?

回答

2

我使用上述規則以外的位置段,它的工作原理!我試着在不同的瀏覽器中查看我的頁面,並且eclipse很好。我總是忘記刪除緩存..

+0

up for the answer :) –