nginx 根據部分 URL 重寫
我正在嘗試設置 nginx 重寫;我已成功設置以刪除副檔名:
https://example.com/accounts?id=user-123
指向https://example.com/accounts.php?id=user-123
僅使用 try_files:
location / { try_files $uri $uri/ $uri.html $uri.php?$args; }
我想在此之前設置第二次重寫;所有使用者 ID 都以 開頭
user-
,因此example.com/user-sdgas3
應該重寫為example.com/accounts?id=user-sdgas3
、example.com/faq-abc8989as
應該重寫為example.com/faqpage?id=faq-abc8989as
、example.com/faq-abc8989as?view=true
轉到example.com/faqpage?id=faq-abc8989as&view=true
等等。我嘗試的只是在每個 URL 擴展的開頭添加了這個的變體:
location ^/faq-(*)$ { try_files $faqpage?id=$1; }
沒有運氣。怎麼可能做到這一點?
您顯然不需要設置一連串的重寫(這看起來就像您正在嘗試的那樣)。這將是錯誤的做事方式:
/user-123 -> /accounts?id=user-123 -> /accounts.php?id=user-123
…因為顯然您可以/應該直接重寫到 PHP 處理程序文件:
/user-123 -> /accounts.php?id=user-123
您似乎沒有一個 PHP 入口點路由器(標準方法)。如果你有這個,那就
try_files
足夠了。但是因為你有很多.php
處理程序文件,你必須使用rewrite
它們。因此:
rewrite ^/user-(.*) /accounts.php?id=user-$1 last; rewrite ^/faq-(.*) /faq.php?id=$1 last; # This is only needed if /index.php can handle /this or /that route location / { try_files $uri $uri /index.php$is_args$args; } location \.php$ { ... the usual stuff for PHP-FPM }