我想在根目录上有一个用户配置文件,因为它目前在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)时,我收到“找不到用户”。
有人可以帮忙吗?
答案 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。