2016-03-01 94 views
0

我寫了一個應用程序,在Apache上,沒有問題獲取url.com/home/index/test的參數,並返回/home/index/test當我在PHP中回聲。在nginx上當我去url.com/?something=test它返回test如何使用nginx獲取url參數?

但是,當我把相同的應用程序放在nginx上它只是返回一個空白的白頁。網絡標籤說200,所以它不會爲我返回任何錯誤。這是我的nginx塊。我不認爲這是代碼相關的。我認爲它的服務器端。

server { 
listen 80 default_server; 
listen [::]:80 default_server ipv6only=on; 

root /var/www/c/public; 
index index.php index.html index.htm; 

server_name server_domain_or_IP; 

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

location ~ \.php$ { 
    try_files $uri /index.php =404; 
    fastcgi_split_path_info ^(.+\.php)(/.+)$; 
    fastcgi_pass unix:/var/run/php5-fpm.sock; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include fastcgi_params; 
} 
} 

編輯:將PHP代碼

這是處理的URL

<?php 

class App 
{ 
protected $controller = 'home'; 
protected $method  = 'index'; 
protected $params  = []; 

public function __construct() 
{ 
    return print_r($this->parseUrl()); 
} 

public function parseUrl() 
{ 
    if(isset($_GET['url'])) 
    { 
     return $url = explode('/', filter_var(rtrim($_GET['url'], '/'), FILTER_SANITIZE_URL)); 
    } 
} 

}

這是控制器

<?php 
class Home extends Controller 
{ 
    public function index() 
    { 
     echo 'home/index'; 
    } 
} 

你可以在我的應用程序文件看完整的回購她Ëhttps://github.com/CircleFramework/Circle/tree/0.1-dev

這是我fastcgi_params

fastcgi_param QUERY_STRING   $query_string; 
fastcgi_param REQUEST_METHOD   $request_method; 
fastcgi_param CONTENT_TYPE   $content_type; 
fastcgi_param CONTENT_LENGTH   $content_length; 
fastcgi_param SCRIPT_FILENAME   $request_filename; 
fastcgi_param SCRIPT_NAME    $fastcgi_script_name; 
fastcgi_param REQUEST_URI    $request_uri; 
fastcgi_param DOCUMENT_URI   $document_uri; 
fastcgi_param DOCUMENT_ROOT   $document_root; 
fastcgi_param SERVER_PROTOCOL   $server_protocol; 
fastcgi_param GATEWAY_INTERFACE  CGI/1.1; 
fastcgi_param SERVER_SOFTWARE   nginx/$nginx_version; 
fastcgi_param REMOTE_ADDR    $remote_addr; 
fastcgi_param REMOTE_PORT    $remote_port; 
fastcgi_param SERVER_ADDR    $server_addr; 
fastcgi_param SERVER_PORT    $server_port; 
fastcgi_param SERVER_NAME    $server_name; 
fastcgi_param HTTPS     $https if_not_empty; 
fastcgi_param REDIRECT_STATUS   200; 
+0

您可以添加您的php代碼和nginx fastcgi_params文件內容嗎? – LFI

+0

補充說@盧卡斯 – TheDizzle

回答

0

我的nginx的更新後得到了我的網站同樣的錯誤。 更換

location ~ \.php$ { 
    try_files $uri /index.php =404; 
    fastcgi_split_path_info ^(.+\.php)(/.+)$; 
    fastcgi_pass unix:/var/run/php5-fpm.sock; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include fastcgi_params; 
} 

location ~ \.php$ { 
    try_files $uri /index.php =404; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_pass unix:/var/run/php5-fpm.sock; 
    fastcgi_index index.php; 
    include fastcgi_params; 
} 

東西就fastcgi_split_path_info觸發此錯誤。

+0

這似乎沒有工作。它創建了一個502壞的網關 – TheDizzle

+0

對不起,當它不適合你。更新我的nginx服務器後,我得到了你描述的問題,這就是解決方案。 – Candyman1332