清理URI / URL Nginx重写多个页面&多个变量

时间:2017-07-27 02:39:48

标签: nginx url-rewriting

我几乎都是正则表达式的白痴,而我刚刚开始使用基于云的Nginx服务器,这与管理我的壁挂式Apache服务器有很大的不同。

我尝试重写以获得这样的干净网址:

www.domain.com/folder/red/abc    --->  www.domain.com/folder/red.cfm?query=abc
www.domain.com/folder/blue/ab/cd/ef ---> www.domain.com/folder/blue.cfm?name=ab&city=cd&state=ef
www.domain.com/folder/blue/ab ---> www.domain.com/folder/blue.cfm?name=ab

我基本上试图在"文件夹"之后重写项目。子文件夹重写为静态.cfm页面。其中一些.cfm页面有零个,一个,两个或三个URL变量;变量的数量不固定或一致。

我一直在阅读关于重写和try_files的 很多 ,而且我已经尝试了几百种不同的重写版本,我只是可以'似乎找到了解决方案。

例如,我尝试过:

location /folder/blue {
     rewrite ^/folder/(.*)?$ /folder/blue.cfm?name=$1 last;
      }

这让我绝对无处可去。我会发布我的整个conf文件,但由于默认服务器设置添加了其他内容,因此 long

我会使这个字符串尽可能简单,但我真的需要帮助。我很感激!

1 个答案:

答案 0 :(得分:0)

为了将来参考,它将有助于制定规范。

这似乎是您提供的唯一规范:

www.domain.com/folder/red/abc    --->  www.domain.com/folder/red.cfm?query=abc
www.domain.com/folder/blue/ab/cd/ef ---> www.domain.com/folder/blue.cfm?name=ab&city=cd&state=ef
www.domain.com/folder/blue/ab ---> www.domain.com/folder/blue.cfm?name=ab

以下解决方案应100%满足上述"规范":

location /folder/red/ {
    rewrite ^(/folder/\w+)/(\w*)$ $1.cfm?query=$2 last;
    return 410;
}
location /folder/blue/ {
    rewrite ^(/folder/\w+)/(\w*)$ $1.cfm?query=$2 last;
    rewrite ^(/folder/blue)/(\w*)/(\w*)/(\w*)$ $1.cfm?query=$2&city=$3&state=$4 last;
    return 410;
}