首页 > 解决方案 > Nginx 重写本地文件路径

问题描述

是否有可能使这种 url 重写?

请求网址: https : //image.domain.com/listing/1_10_iP2LROSEafC01584630756.jpg 改写为: https ://image.domain.com/images/i/P/2/L/iP2LROSEafC01584630756.jpg

如果 /images/i/P/2/L/iP2LROSEafC01584630756.jpg 存在于服务器中,则提供服务,否则将查询重定向到 php 文件 /make_image.php

谢谢!

标签: nginxurl-rewriting

解决方案


请求网址:https : //image.domain.com/listing/1_10_iP2LROSEafC01584630756.jpg 改写为:https ://image.domain.com/images/i/P/2/L/iP2LROSEafC01584630756.jpg

如果您的意思是外部重定向,那么这是使用rewrite指令实现的。将语句放在server块中,或者放在location处理这些类型请求的块中(即以 开头/listing/和/或结尾的URI .jpg)。

您的问题没有说明什么1_10_意思,但让我们假设您希望忽略这两个任意数字。

例如:

rewrite ^/listing/\d+_\d+_(.)(.)(.)(.)(.*)$ /images/$1/$2/$3/$4/$5 permanent;

有关详细信息,请参阅此文档

如果 /images/i/P/2/L/iP2LROSEafC01584630756.jpg 存在于服务器中,则提供服务,否则将查询重定向到 php 文件 /make_image.php

这是通过使用块中的try_files语句来实现的,该语句location处理以 . 开头的 URI 请求/images/

例如:

location /images/ {
    try_files $uri /make_image.php;
}

有关详细信息,请参阅此文档


推荐阅读