根目录下的自定义用户URL?

时间:2017-01-08 23:30:55

标签: ubuntu nginx nginx-location

我想在根目录上有一个用户配置文件,因为它目前在example.com/u/User,我想要example.com/User,

所以我做了这个配置:

location @extensionless-php {
      rewrite ^(.*)$ $1.php last;
  }
  location @try-user {
      rewrite ^(.*)$ /profile.php?user=$1;
  }

    location / {
              try_files $uri $uri.html $uri/ @extensionless-php @try-user;
              # To do: try-page
              index index.html index.htm index.php;
              expires 1h;
              rewrite ^/messages/(.*)$ /messaging.php?u=$1;
    }

每当我使用该配置转到任何页面时,都会转到@ try-user,当我输入我的用户名(example.com/Phil)时,我收到“找不到用户”。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您的try_files声明并非严格正确,因为只有最终字词可以是指定位置。有关详细信息,请参阅this document

nginx URI以前导/开头。在重写时,如果您尝试捕获用户名,则应避免捕获前导/

例如:

location @try-user {
    rewrite ^/(.*)$ /profile.php?user=$1;
}
location / {
    try_files $uri $uri.html $uri/ @try-user;
    ...
}

您可能希望拥有多个rewrite语句,并对它们进行排序,以便将与用户名匹配的模式重定向到profile.php,而将其他任何内容视为PHP文件。例如:

location @try-user {
    rewrite ^/([^/]+)$ /profile.php?user=$1 last;
    rewrite ^(.*)$ $1.php last;
}

有关详细信息,请参阅this document