Nginx URL 重写 (帮助)

Nginx URL 重写 (帮助)

谁能告诉我如何在 Nginx 中重写 URL

https://dl.expamledomain.com/download.php?p=524&st=mmmnGreUwmpRTGl7RO9NtGLhgQZrQ1IW&fn=file.zip

https://dl.expamledomain.com/dwn/524/mmmnGreUwmpRTGl7RO9NtGLhgQZrQ1IW/file.zip

其次,我们的 download.php 文件位于根目录的 public_html 文件夹中。

我在 .htaccess 上使用了这条规则

RewriteEngine On

RewriteRule ^dl/(\w+)/(\w+)/(.*)/?$ download.php?pt=$1&tk=$2&flen=$3 [L,QSA,NC]

它工作正常,但我尝试了很多这样的 Nginx 规则

我在 Nginx 中尝试了此代码但没有起作用

    http{

       server {
          listen       80;
          server_name  *.oursitename.com;

   location / {
    rewrite ^(?i)/dl/(\w+)/(\w+)/(.*)/?$ /download.php?pt=$1&tk=$2&flen=$3 last;
 }

  location = /download.php {
    # Your fastcgi_pass configuration
}
    }

它向我显示这个错误

" open() "/home/username/public_html/dl/515/25xfkUNYOGvvOt0z7ko9YkpHCWZrlRfX/file72.exe" failed (2: No such file or directory),"

我们的文件位置如下

1.Home
    1.Username
     1.public_html
       1.downloadfolder
       2.download.php
       3.index.php
       4.htaccess

答案1

NGINX重写规则总是使用绝对 URI 路径,因此为了重写你的第二URL 进入第一的一个(这是提供的 Apache2 规则所做的),你只需要添加几个/

location / {
    rewrite ^(?i)/dl/(\w+)/(\w+)/(.*)/?$ /download.php?pt=$1&tk=$2&flen=$3 last;
}
location = /download.php {
    # Your fastcgi_pass configuration
}

北卡罗来纳州旗帜被翻译成 PCRE 模式修饰符(?i)(参见这个问题),而QSA 标志是默认的NGINX行为。

评论:在 Apache2 下,最好将重写规则放在服务器配置中,而不是.htaccess文件中,并完全禁用它们:这样您可以获得性能,并且如果您犯了配置错误,它们也不会在 Web 上发布。

相关内容