如何使用多个查询参数为url重写url?

海伦·赛普

服务器:Nginx

应用:PHP

有问题的网址是

/ p / all_articles / user / ABC

/ p / all_articles / user / ABC / page / 123

这是

/index.php?p=all_articles&user=ABC

/index.php?p=all_articles&user=ABC&page=123

ABC = this could be a-zA-Z0-9 as it's username
123 = this could be page numbers 0-9

尝试了许多组合和选项,以下内容使我更接近预期结果,但这并不完美。

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;
}

上面的重写位置块仅在其中一个被引用而另一个却不起作用时才产生。


相似地

/搜索/查询

/ search / QUERY / page / 123

这是

/index.php?search=QUERY

/index.php?search=QUERY&page=123

QUERY = anything a-zA-Z0-9 and space
123 = this could be page numbers 0-9

像all_articles一样,我能得到的最接近的是

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]+))?$

第一个将匹配第二个正则表达式,因此第二个正则表达式将永远不会被求值。

一种简单的解决方案是颠倒rewrite两个location块中语句的顺序

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Javascript解析URL查询参数?

如何在Swift中使用包含相同键的多个值的查询参数构建URL?

如何在FeignClient中使用多个查询字符串参数调用url?

Nginx干净的URL,如何使用try_files将文件夹重写为参数

带参数的NGINX URL重写为不带参数的URL

Nginx:如何将URL子目录重写为查询参数?

如何使用翻新查询URL中间的参数

如何在Azure API管理中为查询字符串参数指定重写URL

Nginx使用子域作为查询参数并重写URL

如何允许URL使用多个参数更改查询?

如何使用查询字符串将URL重写为基础文件系统路径?

如何在URL重写到位的情况下使用JavaScript访问REAL查询字符串参数

如何使用复杂的参数对URL进行URL查询?

如何使用.htaccess将具有多个参数的url重写为新的url

将查询URL重写为小写形式的规则URL

将查询字符串参数重写为URL Apache

用.htaccess重写多个参数的URL

htaccess使用查询参数对URL进行内部重写

使用查询字符串重写多个URL的规则

使用可选参数重写URL

.htaccess URL 重写查询参数问题

从重写的 URL 中删除(现在)未使用的查询参数

使用#params 重写url 以使用nginx 查询参数

使用 URL 参数重写查询

使用 Apache 将带有数据库参数的 URL 重写为漂亮的 URL

如何使用 fastify 发送多个 URL 参数?

使用路径和查询字符串将包含目录路径和参数的 URL 重写为基于参数的 URL

Apache URL 使用查询字符串重写为 ajax url

使用 ||$cont|| 时如何包含多个表 在我的 url 查询参数中使用 '&or' 条件?