nginx 转发通配符 url

问题描述 投票:0回答:1

有人可以帮助我如何设置 nginx 转发来执行以下操作:

这就是我到目前为止所拥有的。我本来打算改编它,但说实话,我无法起步

location ~* ^/pdf/(.*)$ {
      rewrite ^/pdf/(\d+)*$ /pdf.php;
 }

    

我想要它:

  • 匹配格式中的任何网址
    • https://example.com/pdf/My-Old-Man
    • https://example.com/pdf/My-Old-Man/
    • https://example.com/pdf/Big-Hamster
    • https://example.com/pdf/Big-Hamster/
      并将它们转发给
      pdf.php
  • 直接匹配对
    pdf.php
    的调用
  • 转发 /My-Old-Man 部分,以便我可以在我的 php 中将其作为 '$_SERVER['QUERY_STRING']' 的一部分读取(以查询数据库)
  • 禁止任何事情
    https://example.com/pdf/My-Old-Man/bobchips

我知道这要求很高,但我认为这种事情真的很有用,而且我在互联网上看不到有人这样做。

nginx url-rewriting wildcard forward
1个回答
0
投票

这是可能的解决方案之一:

location ^~ /pdf/ {
    location ~ ^/pdf/(?<name>[^/]+)/?$ {
        rewrite ^ /pdf.php?book=$name;
    }
    return 403;
}
location = /pdf.php {
    internal;
    # your php handler here, e.g.:
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$uri;
    fastcgi_pass unix:/path/to/php.sock;
}

请求的名称应作为 PHP 脚本中的

book
查询参数提供。

© www.soinside.com 2019 - 2024. All rights reserved.