【问题标题】:How to use regex like /page/.*/page/ in Nginx location如何在 Nginx 位置使用像 /page/.*/page/ 这样的正则表达式
【发布时间】:2018-02-28 05:22:26
【问题描述】:

网址示例:

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 位置来禁止它。 但是我失败了,我在http://nginx.viraptor.info/尝试了不同的规则

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

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

他们都没有工作......

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

location ~* /page/ {

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

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

没用……

现在我用php来判断url比如:

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

请告诉我如何在 nginx conf 位置使用正则表达式 .*。我想用 nginx。

【问题讨论】:

  • 您正在尝试将参数与页面 url 匹配,并且以这种方式在 url 上完成匹配。在这种情况下是/test/page/4

标签: nginx nginx-location


【解决方案1】:

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

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

【讨论】:

  • 天哪。我是多么的粗心,我居然忽略了它其实是一个参数。谢谢你的回复~我用if ($query_string ~ "/page/.*/page/") { return 404; } 来解决这个问题。
猜你喜欢
  • 2012-04-25
  • 2017-05-06
  • 2022-07-15
  • 2020-09-11
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多