我想在根目录上有一个用户配置文件,因为它目前在 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用户,当我输入用户名(example.com/Phil)时,我得到"找不到用户"。
谁能帮忙?
您的try_files
语句并不严格正确,因为只有最终项可以是命名位置。有关详细信息,请参阅此文档。
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;
}
有关详细信息,请参阅此文档。