Nginx 重定向特定文件扩展名

Nginx 重定向特定文件扩展名

我在设置 Magento 扩展的重定向时遇到问题。请求的 URL 是:

example.com/index.php/Cdiscount/Package/download/type/offers/filename/BMS_PREFIX_161d529d7c3ef4b5ae1dca92e2334de6/BMS_PREFIX_161d529d7c3ef4b5ae1dca92e2334de6.zip

但 nginx 应该返回:

example.com/index.php/Cdiscount/Package/download/type/offers/filename/BMS_PREFIX_161d529d7c3ef4b5ae1dca92e2334de6 

反而。

BMS_PREFIX_和之间的部分.zip经常会发生变化,因此这可能应该会获取 offers/ 位置中的所有 .zip 文件请求。我不能 100% 确定文件名可以offers/filename/BMS_PREFIX...配置为其他内容或根据请求进行更改,但我认为它不会改变。

所以基本上我需要告诉 Nginx 在example.com/path/请求时进行回复example.com/path/path.zip

当前配置:

location / {
    proxy_pass http://127.0.0.1:6081;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    #proxy_hide_header X-Varnish;
    proxy_hide_header Via;
    proxy_hide_header Vary;
    proxy_hide_header X-Server;
    proxy_hide_header X-Backend-Server;
    proxy_hide_header X-Frame-Options;
    proxy_redirect off;
    proxy_max_temp_file_size 0;
    proxy_connect_timeout      7200;
    proxy_send_timeout         7200;
    proxy_read_timeout         7200;
    proxy_buffer_size          256k;
    proxy_buffers              4 512k;
    proxy_busy_buffers_size    512k;
    proxy_temp_file_write_size 512k;
}

答案1

也许你的意思是这样的

rewrite ^(/index\.php/Cdiscount/Package/download/type/offers/filename/BMS_PREFIX_)(.+?)/BMS_PREFIX_(.+).zip $1$2;

在语句之前添加以上行proxy_pass

笔记

  • 要检查重写是否有效,可以在 Magento 设置请求日志,也可以使用重写日志 通过 nginx
  • 此重写不检查文件名后面的 BMS_PREFIX.zip 之前的 BMS_PREFIX是相同的字符串。换句话说,请求example.com/path/otherpath.zip仍然会被重写为example.com/path
  • 有关该正则表达式方案的解释,请参阅这里

相关内容