2016-03-12 60 views
0

當我發佈到404頁面時,nginx會剝離發佈的數據並將請求方法更改爲「GET」。我如何防止這種情況?我將nginx配置爲將php文件作爲域目錄根目錄中的錯誤404頁面提供。我想記錄任何發佈到它的日誌。Nginx 404頁面的請求方法總是GET

nginx.conf

server { 
     listen 80; 
     error_page 404 = /404.php; 
     set $oldhost $host; 
     root /var/www/www/$oldhost; 
     location ~* \.(?:ico|css|js|gif|jpg|png|html|htm)$ { 
      expires 3d; 
      add_header Pragma public; 
      add_header Cache-Control "public"; 
     } 
     location = /favicon.ico { 
      log_not_found off; 
      access_log off; 
     } 
     location = /robots.txt { 
      allow all; 
      log_not_found off; 
      access_log off; 
     } 
     location/{ 
      index index.php index.htm index.html; 
      try_files $uri $uri/ /index.php?$args; 
     } 
     location ~ .php$ { 
      location ~ \..*/.*\.php$ {return 404;} 
      expires 1d; 
      add_header Pragma public; 
      client_max_body_size 80m; 
      add_header Cache-Control "public"; 
      fastcgi_pass unix:/var/run/php5-fpm.sock; 
      fastcgi_buffers 16 16k; 
      fastcgi_buffer_size 32k; 
      fastcgi_intercept_errors on; 
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
      include fastcgi_params; 
     } 
    } 

回答

1

這是因爲當nginx的無法找到一個頁面,它會重定向(GET)用戶您定義的404.php頁面。

你需要做的就是將它添加到try_files指令中,所以當nginx找不到其他的時,nginx會嘗試發送給它,或者讓你可以直接在你的index.php上處理404錯誤(比如wordpress的確如此)。

編輯:

location/{ 
      index index.php index.htm index.html; 
      try_files $uri $uri/ /index.php?$args 404.php 404.php?$args; 
     } 
+0

我應該如何將它添加到我的配置?我曾嘗試將404.php添加到「location/{try_files}」的末尾,並將index和try_files分隔爲另一個stackoverflow線程中的兩個位置語句。我也註釋掉了「error_page 404」這一行。現在,我得到的只是「找不到文件」。 –

+0

用代碼編輯。當然,該位置必須存在404.php頁面。 – peixotorms

相關問題