Nginx

如果查詢字元串存在,nginx重寫

  • August 13, 2018

/過去,一個項目正在從/subdir. 由於舊的 URL 結構類似於/index.php?foo/123/bar我使用以下重寫來獲取所有內容/forum

rewrite ^\/index\.php(.*)$ /forum/$1 last;

這種重寫的問題是它還重定向//forum//index.php/forum/. 現在我不想重定向它們,因為在/.

所以/不應該被重定向,但如果有一個查詢字元串它應該。

我嘗試了以下方法:

location / {
       if ($query_string !~ "") {
               rewrite ^\/index\.php(.*)$ /forum/$1 last;
       }

       try_files $uri $uri/ @rewrite;
}

開始頁面現在可以工作,但如果有查詢字元串,則不會重寫任何內容,我不知道為什麼。

沉寂了半天,我終於明白了。通過$request_uri在 location 塊之外使用完整併調整正則表達式以使index.php強制之後的任何字元都可以正常工作:

location / {
   try_files $uri $uri/ @rewrite;
}

if ($request_uri ~* "^\/index\.php(.+)$") {
   rewrite ^(.*)$ /forum/$1 last;
}

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