2013-10-22 14 views
0

我有一个创建与某些环节的循环,像这样的脚本:改写正确格式化的URL nginx的

http://example.com/index.php?print=1 
http://example.com/index.php?print=1?print=1 
http://example.com/index.php?print=1?print=1?print=1 
http://example.com/index.php?print=1?print=1?print=1?print=1 

我想有重定向任何URL重写(301重定向)代替规则,包含打印不止一次= 1更向相同的URL,但只有一个打印= 1

示例:?

http://example.com/index.php?print=1?print=1?print=1?print=1?print=1?print=1 

重定向到

http://example.com/index.php?print=1 

http://example.com/somefolder/?print=1?print=1?print=1?print=1 

重定向到

http://example.com/somefolder/?print=1 

http://example.com/randomfilename.php?print=1?print=1?print=1 

重定向到

http://example.com/randomfilename.php?print=1 

任何帮助,这将不胜感激,nginx的正则表达式和/重写仍然是新的我......

+0

我们解决了这口井之前,我们需要知道如何检测它在nginx的,就是两个字'print'我们必须要检查的只有一个字?或者它是一个例子词?有没有可能将另一个变量添加到它?例如'?print = 1?print = 1?print = 1?new-variable = 2'? –

+0

它不仅是单词打印,而且整个字符串“?print = 1”被多次使用,没有其他GET变量被使用。 –

回答

0

嗯,我不知道这是否会工作,但我们可以尝试,

添加这些行在服务器块或location /

if ($args ~ "(print=1\?print=1)") { 
    return 301 $scheme://example.com$request_uri?print=1; 
} 
+0

完美,稍作修改。我更新了您的答案,因此这是我的问题的完美解决方案。非常感谢! –

+0

好吧,我检查了你编辑的内​​容,你有''args'不包含第一个'?'的一点,因为我们要写'print = 1?print = 1',所以我们不需要数量'{ 1,}',但我不明白为什么用'uri'替换'$ request_uri',并且对于'http'也是',但我更喜欢使用'$ scheme',我会用那些编辑我的答案2更改,请尝试一下,并告诉我它是否可以工作 –