Nginx
如果查詢字元串存在,nginx重寫
/
過去,一個項目正在從/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; }