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