NGINX 将查询重写为路径?

NGINX 将查询重写为路径?

我正在尝试做的事情:

转变

/posts/?post={randomnumber-atoF}
or
/posts?post=120430awasdfwasfw

/posts/120430awasdfwasfw

我的服务器块(到目前为止)

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /forum;
        index index.php;
        server_name forum.example.net;
        location / {
                try_files $uri $uri/ =404;
        }
        # pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }
        location ~ /\.ht {
                deny all;
        }
}

服务器正在获取从另一个 Nginx 代理(另一个远程服务器)传递的 URL。(并且该服务器确实有 SSL,端口 443)

我尝试过的项目:

rewrite ^/posts/index.php /posts/$arg_post permanent;

编辑:

抱歉,我没有说,查询必须进入索引,因为 ?post 是一个查询,进入数据库。我想让你不需要查询,而只需转到 {帖子编号}

答案1

帖子标题可以是“转换/重写 URL 路径以进行查询”。无论如何,根据编辑和评论,rewrite ^/posts/(?<id>[a-zA-Z0-9]+)$ /posts/?post=$id;可能会有效。无需使用permanent标志rewrite。如果使用permanent,用户将被重定向。

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /forum;
        index index.php;
        server_name forum.example.net;

        rewrite ^/posts/(?<id>[a-zA-Z0-9]+)$ /posts/?post=$id;

        location / {
                try_files $uri $uri/ =404;
        }
        # pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }
        location ~ /\.ht {
                deny all;
        }
}

相关内容