尝试将 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;
}
?:
组开头的问题掩码冒号表示不计算后向引用。