nginx PHP用户配置文件重写

nginx PHP用户配置文件重写,php,nginx,url-rewriting,Php,Nginx,Url Rewriting,我正在尝试将我的url配置文件url重写为干净的,不包含参数,至少对用户来说是这样。我正在使用一个nginx服务器,在让它工作时遇到了一些问题 网站示例: 个人资料链接: 工作原理: 我想工作的是: 我的网站配置中的代码块: location /subfolder/ { if ($query_string ~ "^username=([A-Za-z0-9]+)$"){ rewrite ^/profile.php$ http://website.com/subfol

我正在尝试将我的url配置文件url重写为干净的,不包含参数,至少对用户来说是这样。我正在使用一个nginx服务器,在让它工作时遇到了一些问题

网站示例:

个人资料链接:

工作原理:

我想工作的是:

我的网站配置中的代码块:

location /subfolder/ {
    if ($query_string ~ "^username=([A-Za-z0-9]+)$"){
        rewrite ^/profile.php$ http://website.com/subfolder/%1 redirect;
    }
}

你的重定向几乎是正确的。只是一些表面上的改变

location = /subfolder/profile.php {
    if ($arg_username) {
        return 301 /subfolder/$arg_username/;
    }
    fastcgi_pass 127.0.0.1:9001;
    include fastcgi_params;
}
现在,regilero告诉我们,您需要解析/subfolder/Username/inside脚本,或者您可以通过nginx来完成

location ~ ^/subfolder/(?<username>.+)/$ {
   rewrite ^(.*)$ /subfolder/profile.php?username=$username break;
   fastcgi_pass 127.0.0.1:9001;
   include fastcgi_params;
   fastcgi_param REQUEST_URI $uri$is_args$args;
}

2个重要注意事项:重写中断关键字以防止重定向循环;fastcgi_param REQUEST_URI在fastcgi_params中通常是$REQUEST_URI,但它是原始URI,因此我们需要更改它。

只有一个提示,您正在做相反的事情,您尝试在内部用查询字符串重写请求,使PHP无法理解。您需要在PHP代码中编写最终URL,并在Nginx内部管理从这个新URL到查询字符串版本的重写。