nginx重写规则比它应该捕获更多

时间:2013-09-24 21:23:05

标签: nginx rewrite

我按如下方式设置了重写规则:

rewrite ^(www\.)*mysite\.com(/)*(index\.php)*$ /texts/mysite.com_page_24.html last;

它应该只捕获如下的调用:

www.mysite.com
www.mysite.com/
mysite.com
mysite.com/
www.mysite.com/index.php

但它也会捕获诸如以下的电话:

mysite.com/index.php?option=com_correct&task=view&id=5&Itemid=30

为什么我会得到这种奇怪的行为? ^$标志清楚地表明开始和结束。

编辑:

在请求我不想捕获的内部链接时查看日志文件:

"GET /mysite.com/index.php?option=com_correct&task=view&id=5&Itemid=30 HTTP/1.0" 200 118 "-" "-"

经过进一步调查后,似乎nginx正在避免争论并且表现得好像是同一页面。如何设置nginx以避免参数,并将其视为不同的页面?

1 个答案:

答案 0 :(得分:0)

是的,就像你已经发现的那样,重写不会影响查询字符串,你需要处理$args字符串,简单的方法是将你的重写置于一个if条件中,表明args为空,试试像这样的东西

if ( $args = "" ) {
    # your rewrite
}