使用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;