我在uri中有特殊的参数data = / path / to / filename.htm.
在SSI上建立了旧的和生锈的网站,我无法修改它.
像这样的东西:
if (!-f $arg_data){
rewrite ^.*$ /@R_301_448@.htm last;
}
但我得到:
rewrite or internal redirection cycle while processing “/@R_301_448@.htm
@H_502_24@我认为是因为我没有检查arg_data是否存在.
但是Nginx没有嵌套if-s.
我试过了:
set $data index.htm; if ($args ~ "data=(.+)") { set $data $1; } if (!-f $data) { rewrite ^.*$ /@R_301_448@.htm last; }
Idea将$data设置为100%存在的文件,然后在重写之后传递数据参数.
看起来我做错了.
@H_301_43@最佳答案@H_301_43@好的,关于我们最后的评论,你需要两个if语句的AND条件.Nginx无法做到这一点.
为实现这一点,我们将使用一个处理$test var的小技巧:
@H_301_43@server { #...directives... error_page @R_301_448@ /@R_301_448@.htm; if ($args != "") { # Test if there are some args set $test A; } if (!-f /full/path/to/$arg_data) { # Test if file in args doesn't exist set $test "${test}B"; } if ($test = AB) { # If there are some args AND if file doesn't exist return @R_301_448@; } }