NGINX 带参数的 URL 重写为不带参数的 URL

NGINX 带参数的 URL 重写为不带参数的 URL

我的服务器上有 NGINX 背景。我不知道为什么我的规则不起作用。

我如何重定向或重写它以便可以打开具有相同内容的 URL,例如:

http://www.example.com/my_dir/value/

假如我有这个 URL,例如:

http://www.example.com/my_dir/filename.php?parameter=value

我尝试了一些解决方案,但没有效果:

Case #1:
location /my_dir/ {
  if ($args ~* "filename.php/?parameter=value1") {
      rewrite ^ http://www.example.com/my_dir/$arg_param1? last;
  }
}

Case #2:
rewrite ^/my_dir/(.*)$ /filename.php?parameter=$1 last;

Case #3:
location /my_dir {
    try_files $uri $uri/ my_dir/filename.php?$args;
}

Case #4:
location /my_dir/ {
    rewrite ^/my_dir/filename.php?parameter=(-+([a-zA-Z0-9_-]+))?\$ /filename.php?parameter=$1 last;
}

这可能吗?我必须配置我的 PHP 文件才能使其正常工作吗?

有任何想法吗?

谢谢!

答案1

访问:domain.com/folder/abc --> domain.com/folder/filenam.php?url=abc

//this is inside the http block
map $request_uri $request_basename {
    ~/(?<captured_request_basename>[^/?]*)(?:\?|$)
$captured_request_basename;
}

server {
    [snip]
    location /folder {
        try_files folder folder/ /folder/filename.php?url=$request_basename;
    }
}

答案2

只需在服务器块内使用这个 try_files 指令:

try_files my_dir my_dir/ /my_dir/filename.php?$args;

相关内容