Nginx 重写问题

Nginx 重写问题

尝试将 apache 配置转换为 nginx。

<Directory /usr/local/image/>
 Order allow,deny
 Allow from all
</Directory>
Alias /key1 /usr/local/image
Alias /key2 /usr/local/image
RewriteEngine On
RewriteCond /usr/local/image/$1 !-f
RewriteRule ^\.(jpg|jpeg|gif|png))$ /handler.php

因此对 /key1/subdir1/subdir2/123.png 或 /key2/subdir1/subdir2/123.png 的请求将查找 /usr/local/image/subdir1/subdir2/123.png,如果存在则提供该服务,如果不存在则转到 /handler.php(404)

我试过了:

    location ^~ /key1 {
     alias /usr/local/image/;
     error_page 404 /handler.php;
}

这在某种程度上是有效的 - 但我想将此规则限制为仅限于图像(jp?g|gif|png),但 subdir1 和 subdir2 的值会有所不同。

关于如何在 nginx 中有效地执行此操作有什么建议吗?

答案1

尝试这个:

location ~* /key[12]/(.*\.(jpe?g|gif|png)) {
    alias /usr/local/image/$1;
    error_page 404 /handler.php;
}

PS:我用于~*不区分大小写的匹配。


编辑

如果你的两个别名完全不同,你可以将其放入圆括号中:

location ~* /(?:abc12345|12abcdef)/(.*\.(jpe?g|gif|png)) {
    alias /usr/local/image/$1;
    error_page 404 /handler.php;
}
  • ?:组开头的问题掩码冒号表示不计算后向引用。

相关内容