谁能告诉我如何在 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 上发布。