简单的nginx重写问题

时间:2012-12-17 23:18:57

标签: url-rewriting nginx rewrite

我今天一直在试图改变nginx的重写,并在这里阅读了几个问题/答案,并彻底阅读了我遇到的几个指南。

虽然大多数事情都很自然地告诉我,但我并没有抓住它,可能是因为我对任何形式的正则表达都缺乏经验。

我有一个download.php脚本,它会覆盖我的nginx标题并强制浏览器使用“另存为”对话框执行下载,而不是打开一个新页面。

它完美无缺,但是我想隐藏脚本本身的用户名。

具体来说,我想更改此网址:

http://www.example.com/scripts/download.php?id=http://www.example.com/images/0/1/fullsize/96698298450ca01a60875e_34.jpg

因此,对于用户来说,它只是显示为id GET参数:

http://www.example.com/images/0/1/fullsize/96698298450ca01a60875e_34.jpg

但是对于我的生活,我似乎无法使它发挥作用。

希望有人可以来救援。提前谢谢。

修改

只是为我的问题添加一些清晰度...理想的解决方案是让我能够在我的webapp中找到这样的链接:

 http://www.example.com/images/0/1/fullsize/96698298450ca01a60875e_34.jpg?dl=1

让nginx选择它有一个dl = 1并且在/ images /目录中,然后重写它以使用下载脚本:

  http://www.example.com/scripts/download.php?id=http://www.example.com/images/0/1/fullsize/96698298450ca01a60875e_34.jpg

这样,当只查看图像时,它们将通过脚本,并且只有当dl = 1 param到位时,才会通过脚本重写和路由图像。

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您希望在您的网络应用中放置http://www.example.com/images/0/1/fullsize/96698298450ca01a60875e_34.jpg&dl=1等链接,当用户点击该链接时,会将其重定向到download.php脚本?

下面的重写指令应该实现这一点,假设您正在重定向到同一主机。这将应用于以/images/ 查询参数dl=1开头的任何网址路径。这将执行302(临时)重定向。如果您想要永久(301)重定向,请将redirect替换为permanent

location /images/ {
    if ($args ~ "dl=1") {
        rewrite ^/images/(.*)$ /scripts/donwloads.php?id=$scheme://$host/images/$1 redirect;
    }
}

如果你想尝试另一种方式(有链接到download.php脚本但是将用户重定向到实际的资源网址 - 不知道为什么,并且可能做出这样的盲目重定向可能是个坏主意)你可以做使用此指令(值得检查id查询字符串参数是否存在)

location /scripts/download.php {
    rewrite ^(.*)$ $arg_id? permanent;
}

如果这些解决方案中的任何一个都朝着您想要的方向发展,请告诉我们,我们可以根据您的需求进行调整。