带有尾部斜杠的 Nginx 通配符路径不起作用

带有尾部斜杠的 Nginx 通配符路径不起作用

我想创建以/blog文件夹开头的通配符路径,我使用以下代码

location ~* ^/blog/(.*)$ {
    try_files $uri $uri/ $uri.php @rewrites;
}

location @rewrites {
    rewrite ^/blog/$ /rewrite/bloguri.php last;
}

以下链接有效,显示的内容/rewrite/bloguri.php

http://www.example.com/blog/randomlink.html
http://www.example.com/blog/randomlink

但以下结构不起作用,我需要它才能工作

http://www.example.com/blog/randomlink/
http://www.example.com/blog/randomlink.php

编辑 :

bloguri.php包含以下内容

<?php
echo "blog";
?>

以下是日志的截图
日志

下面是我的完整 nginx.conf

 location ~ ^/~(.+?)(/.*?\.php)(/.*)?$ {
     alias /var/www/vhosts/example.com/web_users/$1/$2;
     fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
     fastcgi_param PATH_INFO $fastcgi_path_info;
     fastcgi_pass "unix:///var/www/vhosts/system/example.com/php-fpm.sock";
     include /etc/nginx/fastcgi.conf;
 }

 location ~ \.php(/.*)?$ {
     fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
     fastcgi_param PATH_INFO $fastcgi_path_info;
     fastcgi_pass "unix:///var/www/vhosts/system/example.com/php-fpm.sock";
     include /etc/nginx/fastcgi.conf;
 }

 location ~ /$ {
     index index.html index.cgi index.pl index.php index.xhtml index.htm index.shtml;
 }

 location /blog {
     try_files $uri $uri/ /rewrite/blog.php;
 }

答案1

尝试这个:

location /blog {
    index /rewrite/bloguri.php;
    try_files $uri $uri/ /rewrite/bloguri.php;
}

您的问题没有明确说明您想要将所有对不存在文件的请求重定向到脚本,但我认为这就是您正在寻找的。

这一行代码就可以完成这个任务,这也是在 nginx 中实现前端控制器模式的标准方法。

相关内容