Nginx。通配符别名位置。可能吗?

Nginx。通配符别名位置。可能吗?

使用http://wiki.nginx.org/NginxHttpCoreModule#alias关于如何使用子目录别名的示例,我注意到它没有提及如何动态地执行此操作。

在以下示例中...

location ~ ^/download/(.*)$ {
  alias /home/website/files/$1;
}

...请求“/download/book.pdf”将返回文件“/home/website/files/book.pdf”。再次注意,只有位置后面的请求 URI 部分被附加到别名定义的路径上。

如果我创建一个标有用户注册时创建的用户名的文件夹,那么这个文件夹名称将始终是唯一且不同的。我如何改变上面例子中的正则表达式,以便单词下载也成为通配符子目录?

location ~ ^/randomusername/(.*)$ {
  alias /home/website/profiles/randomusername/$1;
}

答案1

您需要了解一些有关正则表达式的背景知识。

请尝试下面的代码,看看是否有帮助。

location ~ ^/([^/]+)/([^/?]+)$ {
  alias /home/website/profiles/$1/$2;
}

答案2

好吧,在学习了 NGINX 之后,这就是我 9 年前寻找的答案。

location / {

  # example rewrite rules for www.example1.com

  rewrite ^/get/users/?$ /getData.php?usersFilter=all                             last;
  rewrite ^/get/users/(\d+)/?$ /getData.php?userId=$1                             last;
  rewrite ^/get/users/(\d+)/comments/?$ /getData.php?userId=$1&commentsFilter=all last;

}

@Kristi Jorjii:下面,我们使用 /[^/]*$/ 正则表达式来匹配 URL 中最后一个斜杠后的部分。

rewrite ^/sitemap/[^/]*$ /var/www/html/sitemap/$1 last;

相关内容