Путь подстановочного знака 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;
}

В вашем вопросе не указано явно, что вы хотите перенаправить все запросы к несуществующим файлам в сценарий, но я предполагаю, что это то, что вы ищете.

Этот однострочник сделает именно это и является стандартным способом реализации шаблона front-controller в nginx.

Другие вопросы по тегам