try_files位于nginx中的regex特定位置

时间:2017-07-19 14:04:37

标签: regex nginx

我是regex和nginx的新手,我想完成这个:

domain.com/username {no trailing slash}指向domain.com/profile/user/username
domain.com/username/ {with trailing slash}指向domain.com/profile/user/username

location ~ ^/(?<username>[A-Za-z0-9\.\_]+)/?$ {
    try_files $uri $uri/ /profile/user/$username/?rewrite=1&$args;
}

只能解决几个问题 1.位置/正在尝试文件,我不想这样。
2.如果我删除了?在正则表达式字符串的末尾创建/ strict,第一个问题得到解决,但是不会尝试没有尾部斜杠的用户名。

1 个答案:

答案 0 :(得分:0)

我通过向所有网址添加一个尾部斜杠来修复此问题,如下所示:

location / {
     root            /usr/share/nginx/html/domain.com;
     index           index.php index.htm index.html;
     rewrite         ^([^.]*[^/])$ $1/ permanent;
}
location ~ ^/(?<user>[A-Za-z0-9\.\_]+)/$ {
     try_files       $uri $uri/ /$uri/ /profile/user/$user/;
}