Nginx

Nginx 不將重寫傳遞給 PHP-FPM

  • October 6, 2014

我對 nginx 有以下重寫規則。

規則似乎無法正常執行,例如,當我導航到 /game/2/ 時,遊戲規則應該重寫http://thegamesdb.net/game/2/http://thegamesdb.net/index.php?tab=game?id=2懸停,瀏覽器正在下載一個名為 simple 的文件download

我的重寫規則如下:

# nginx configuration
   location /game {
       rewrite ^/game/([0-9]+)(/?)$ /index.php?tab=game&id=$1 break;
       rewrite ^/game-edit/([0-9]+)(/?)$ /index.php?tab=game-edit&id=$1 break;
   }
   location /search {
       rewrite ^/search/([a-z0-9\-\ /\+]+)(/?)$ index.php?tab=listseries&string=$1&function=Search break;
       rewrite ^/search(/?)$ /index.php?tab=listseries&function=Search break;
   }
   location /browse {
    rewrite ^/browse/([0-9+]*)(/?)$ /index.php?tab=listplatform&stringPlatform=$1&function=Browse+By+Platform break;
   }
   location /platform {
       rewrite ^/platform/([0-9]+)(/?)$ /index.php?tab=platform&id=$1 break;
       rewrite ^/platform/([a-z0-9\-]+)(/?)$ /index.php?tab=platform&alias=$1 break;
       rewrite ^/platform-edit/([0-9]+)(/?)$ /index.php?tab=platform-edit&id=$1 break;
   }
   location /favorites {
       rewrite ^/favorites(/?)$ /index.php?tab=favorites break;
   }
   location /message {
   rewrite ^/message/([0-9]+)(/?)$ /index.php?tab=message&messageid=$1 break;
   }
   location /adminstats {
       rewrite ^/adminstats/([a-z0-9\-]+)(/?)$ /index.php?tab=adminstats&statstype=$1 break;
   }
   location /blog {
       rewrite ^/blog(/?)$ /blog/ break;
   }
   location /wiki {
       rewrite ^/wiki(/?)$ /wiki/ break;
   }
   location /forums {
       rewrite ^/forums(/?)$ /forums/ break;
   }
   location /phpmyadmin {
       rewrite ^/phpmyadmin(/?)$ /phpmyadmin/ break;
   }
   location / {
       rewrite ^/([a-z0-9\-\ /\+]+)(/?)$ index.php?tab=$1 break;
       if (!-e $request_filename){
        rewrite ^(.*)$ /index.php break;
       }
   }

我看不出規則有什麼問題,我錯過了什麼嗎?

順便說一句,我正在使用 Ajenti-V,上面的規則已輸入到 Ajenti-V 網站的自定義配置面板中。

更新:

似乎我目前的重寫規則需要路由到,php-fpm因為它們目前被視為靜態文件。

我將如何調整上面的程式碼來實現這一點?

您沒有位置塊將 php 文件的請求轉發到處理後端。

為 php 文件添加一個 location 塊並在其中使用 nginx fastcgi_module,然後將重寫轉換為 php 文件breaklast.

你可以找到很多關於伺服器故障的例子:搜尋

更新:按照評論中的要求修復根位置塊。

您的正則表達式已經匹配/,因此/?永遠不會匹配任何內容,例如 for /stats/。您必須設置兩個重寫規則:

location / {

   rewrite "^/(.*)/$" /$1;
   rewrite "^/([- +a-z0-9/]+)$" /index.php?tab=$1 last;

   [ ... ]


}

引用自:https://serverfault.com/questions/633970