首页 > 解决方案 > Nginx - try_files 正则表达式

问题描述

我需要将网站从 Apache 迁移到 Nginx。

在这个项目中,有一个带有这些规则的 .htaccess :

RewriteCond %{REQUEST_URI} /(.+)/media/([0-9]+)\.(.+)\.(.+)\.(.+)
RewriteRule .* - [E=logofile:/temp/logo/%2.%3.%4.%5]
RewriteCond %{REQUEST_URI} /(.+)/media/([0-9]+)\.(.+)\.(.+)\.(.+)
RewriteRule .* - [E=logopath:%{DOCUMENT_ROOT}%{ENV:logofile}]

RewriteCond %{REQUEST_URI} /(.+)/media/([0-9]+)\.(.+)\.(.+)\.(.+)
RewriteRule .* - [E=capturefile:/temp/capture/%2.%3.%4.%5]
RewriteCond %{REQUEST_URI} /(.+)/media/([0-9]+)\.(.+)\.(.+)\.(.+)
RewriteRule .* - [E=capturepath:%{DOCUMENT_ROOT}%{ENV:capturefile}]

RewriteCond %{REQUEST_URI} /(.+)/media/([0-9]+)\.(.+)\.(.+)\.(.+)
RewriteRule .* - [E=genericfile:/temp/generic/%2.%3.%4.%5]
RewriteCond %{REQUEST_URI} /(.+)/media/([0-9]+)\.(.+)\.(.+)\.(.+)
RewriteRule .* - [E=genericpath:%{DOCUMENT_ROOT}%{ENV:genericfile}]

RewriteCond %{ENV:logofile} !^$
RewriteCond %{ENV:logopath} -f
RewriteRule .* %{ENV:logofile} [L]
RewriteCond %{ENV:capturefile} !^$
RewriteCond %{ENV:capturepath} -f
RewriteRule .* %{ENV:capturefile} [L]
RewriteCond %{ENV:genericfile} !^$
RewriteCond %{ENV:genericpath} -f
RewriteRule .* %{ENV:genericfile} [L]

我尝试使用以下代码在 Nginx 块中转换它们:

location ~* ^/(.+)/media/([0-9]+)\.(.+)\.(.+)\.(.+) {
    try_files $uri $uri/ /temp/logo/$2.$3.$4.$5 /temp/capture/$2.$3.$4.$5 /temp/generic/$2.$3.$4.$5;
}

但它不起作用......然而,这个指令有效,但这还不够:

rewrite ^/(.+)/media/([0-9]+)\.(.+)\.(.+)\.(.+) /temp/capture/$2.$3.$4.$5;

如果你能帮我解决这个问题,那就太好了:)

克里斯托夫

标签: nginxmod-rewrite

解决方案


推荐阅读