如何在 Nginx 位置使用正则表达式 /page/.*/page/

How to use regex like /page/.*/page/ in Nginx location

Url 示例:

http://test.com/test/page/4?-test?o?o_html/page/100/page/2/page/3/page/4/page/4/page/2/page/106/page/107/page/2/page/3/page/4/page/108/page/3/page/2/page/3/page/4&-test

我想用nginx location来禁止它。 但是我失败了,我在 http://nginx.viraptor.info/

中尝试了不同的规则

location ~ /page/.*/page/ { return 403; }

location ~* \/page/.*/page/ {
location ~* /page/\.*/page/ {

None 他们中的...

我发现只有使用 /page/ 是可行的。

location ~* /page/ {

但是当我添加.*/page/ like:

location ~* /page/.*/page/ {

没用...

现在我用php判断url像:

if (preg_match ("/\/page\/.*\/page\//i", $_SERVER["REQUEST_URI"]))

请告诉我如何在 nginx conf 位置使用 regex.*。我想用nginx。

第一个 ? 之后的所有内容都是 URI 参数,它们不是 URI 的一部分,因为这样的位置匹配永远不会起作用。如果有一个解决方案允许您在 Nginx 中执行此操作,那将是一个麻烦,您应该像您所说的那样在您的脚本中执行此级别的检查。

参见:https://serverfault.com/questions/811912/can-nginx-location-blocks-match-a-url-query-string