0

我设置了如下重写规则:

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 设置为不避免参数并像它们是不同的页面一样行事?

4

1 回答 1

0

是的,就像你已经发现的那样,重写不会影响查询字符串,你需要处理$args字符串,简单的方法是将你的重写放在一个 if 条件中,它说 args 是空的,试试这样

if ( $args = "" ) {
    # your rewrite
}
于 2013-09-25T00:47:18.910 回答