如果文件不存在,nginx 将文件路径转换为查询字符串

如果文件不存在,nginx 将文件路径转换为查询字符串

我正在为以下场景编写重写规则,如果文件不存在,则希望规则起作用

出处:/news/press_releases/2016/12/filenews.html

至:/news/news-details.php?newsYear=2016&newsMonth=12&newsID=filenews

重写规则:

位置 ~ /news/press_release {

重写 ^/news/press_releases/([1-9][0-9])/([1-9][0-9])/(.*).html$ https://www.example.com/news/news-details.php?newsYear=$1&新闻月份=$2&新闻ID=$3; }

上述重写规则有效,但我希望在文件不存在时重写规则有效(.html),尝试了try_file但没有成功有什么帮助吗?

答案1

尝试这个:

location ~ /news/press_release/(?<year>\d{4})/(?<month>\d{2})/(?<title>.+)\.html {
    try_files /news/press_release/$year/$month/$title.html /news/news-details.php?newsYear=$year&newsMonth=$month&newsID=$title;
}

这里的技巧是在指令中捕获文章的详细信息location,然后在try_files指令中使用捕获的信息。

为了正则表达式捕获的清晰度,我使用了命名捕获组。

答案2

这个对我有用

位置 ^~ /新闻/ {

try_files $uri @rule1;}

位置@rule1 {

重写 ^/news/press_releases/([1-9][0-9])/([1-9][0-9])/(.*).html$ /news/news-details.php?newsYear=$1&newsMonth=$2&newsID=$3; }

相关内容