Nginx 如何为具有多个查询参数的url重写url?
服务器:Nginx 应用程序:PHP 有问题的URL是 /p/所有文章/用户/ABC /p/all_articles/user/ABC/page/123 那是 /php?p=all_articles&user=ABC /index.php?p=all_articles&user=ABC&page=123 尝试了许多组合和选项,以下让我更接近预期的结果,但它并不完美Nginx 如何为具有多个查询参数的url重写url?,nginx,url-rewriting,Nginx,Url Rewriting,服务器:Nginx 应用程序:PHP 有问题的URL是 /p/所有文章/用户/ABC /p/all_articles/user/ABC/page/123 那是 /php?p=all_articles&user=ABC /index.php?p=all_articles&user=ABC&page=123 尝试了许多组合和选项,以下让我更接近预期的结果,但它并不完美 location /p/all_articles { rewrite ^/p/all_articles/user/(.*)?
location /p/all_articles {
rewrite ^/p/all_articles/user/(.*)?$ /index.php?p=all_articles&user=$1 last;
rewrite ^/p/all_articles/user/(.*)/page(?:/([0-9]+))?$ /index.php?p=all_articles&user=$1&page=$2 last;
try_files $uri $uri/ /index.php;
}
上面的“重写位置”块仅在引用其中一个时才会产生结果,而另一个将起作用,但不能同时使用
同样地 /搜索/查询 /搜索/查询/第页/123 那是 /php?search=QUERY /php?search=QUERY&page=123 就像所有的文章一样,我能得到的最接近的是
location /search {
rewrite ^/search /index.php?search last;
rewrite ^/search/(.*)/page(?:/([0-9]+))?$ /index.php?search=$1&page=$2 last;
try_files $uri $uri/ /index.php;
}
但是,当引用另一个重写时,这可以得到其中一个干净的URL,但不能同时得到
如果有人能回答这个问题,我将不胜感激 对
rewrite
语句按顺序求值,因此需要将更具体的正则表达式放在不太具体的正则表达式之前
使用两个正则表达式:
^/search
^/search/(.*)/page(?:/([0-9]+))?$
第一个正则表达式将匹配与第二个正则表达式匹配的任何内容,因此永远不会对第二个正则表达式求值
简单的解决方案是颠倒位置
块中的重写
语句的顺序
location /search {
rewrite ^/search /index.php?search last;
rewrite ^/search/(.*)/page(?:/([0-9]+))?$ /index.php?search=$1&page=$2 last;
try_files $uri $uri/ /index.php;
}
^/search
^/search/(.*)/page(?:/([0-9]+))?$