用nginx重写规则用斜杠替换get变量

时间:2013-07-18 11:02:29

标签: nginx

我已经读了两天我能找到的所有东西,但似乎没有任何效果

我有这样的网址

http://www.mysite.com/auction.php?category=23140

并希望制作重写规则,以便它显示为

http://www.mysite.com/auction/category/23140.php

我这样做只是为了建立seo友好网址,但到目前为止没有任何工作。

重写^ / auction.php?category =(。*)$ / auction / category / $ 1 last;

看起来很简单,我真的不知道为什么它不起作用。

我应该将此行放在服务器块还是位置块中?正则表达式错了吗?

非常感谢任何帮助

2 个答案:

答案 0 :(得分:3)

首先,请记住nginx中的重写 与查询字符串不匹配,只有uri

例如,在此网址:“ /auction.php?category=23140 ”中,uri为 /auction.php ,查询字符串为 category = 23140

所以在你的情况下,正确的规则应该是:

if ( $request_uri ~ "^/auction\.php\?category=[0-9]+(.*)?$" ) {
    rewrite "^.*$" /auction/category/$arg_category break; 
}

以上只是一个例子,您可以根据自己的情况进行更改。您还可以从nginx手册中找到$request_uri$arg_PARAMETER的用法。

答案 1 :(得分:0)

你向后做,试试这个。

rewrite ^/auction/([^/]*)/([0-9]*) /auction.php?$1=$2

一条建议,如果这是一个你没有框架的自定义应用程序,你可以找到一个你可以使用的路由模块,它可以帮助你轻松完成所有事情。