我正在为以下场景编写重写规则,如果文件不存在,则希望规则起作用
出处:/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; }