需要制作一个正则表达式来匹配 URL 中的字符串,同时排除结尾字符串

需要制作一个正则表达式来匹配 URL 中的字符串,同时排除结尾字符串

非常感谢您对为 nginx 映射块制作正确正则表达式的帮助。本质上,我需要在 URL 中匹配一个模式 [通常是一个单词:例如 course],但 URL 不能以 jpg、png、gif 等扩展名结尾

因此它应该匹配:

/课程/历史

它不应该匹配:

  • /课程/历史.png
  • /课程.jpg
  • /课程/历史/学生/男孩.png

我根本无法让任何东西正常工作,感觉我离成功还很远

map $request_uri $redirect_uri_course {
~/course/+ !.(jpg|png|gif)$   http://www.example.com/courses;
}

请帮忙,谢谢

答案1

您可以使用正则表达式负面后视

例如:

~^/course/[^?]*(?<!\.(jpg|png|gif))([?]|$)

或者,考虑到正则表达式是按顺序求值的,您可以使用两个语句,其中第一个语句求值为零。

例如:

~\.(jpg|png|gif)([?]|$)    0;
~^/course/               /some/path;

相关内容