我正在從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一樣。任何猜測?
up for the answer :) –