我正在尝试设置 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; }
毫无运气。这该如何做呢?
答案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
}