繁体   English   中英

将IIS的web.config中的URL重写为nginx.conf

[英]URL Rewrite in web.config of IIS to nginx.conf

nginx的新手,完全感到困惑。

如何将此URL重写转换为nginx?

<rewrite>   
    <rules>
        <rule name="IndexFolders" stopProcessing="true">
            <match url="(.*[^/]+)$" />
            <conditions>
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" />
            </conditions>
            <action type="Rewrite" url="/_index/{R:1}.html" />
        </rule>
        <rule name="OtherFile" stopProcessing="true">
            <match url="\.\w+$" />
        </rule>
        <rule name="HtmlFile" stopProcessing="true">
            <match url="^([^.]*[^/]+)$" />
            <action type="Rewrite" url="{R:1}.html" />
        </rule>
    </rules>
</rewrite>

尝试使用转换器,但无法正常工作。

location / {
    if (-d $request_filename){
        set $rule_0 1;
    }
    if ($rule_0 = "1"){
        rewrite /(.*[^/]+)$ /_index/$1.html last;
    }
    location ~* /\.\w+$ {
        break;
    }
    rewrite ^/([^.]*[^/]+)$ /$1.html last;
}

这在我的测试环境中有效:

location / {
    if (-d $request_filename){
        rewrite ^/(.*[^/]+)/$ /_index/$1.html break;
    }

    location ~* /.*\.\w+$ {
        break;
    }

    rewrite ^/([^.]*[^/]+)$ /$1.html break;
}            

注意nginx 重写指令

可选标志参数可以是以下之一:

持续

停止处理当前的ngx_http_rewrite_module指令集,并开始搜索与更改后的URI相匹配的新位置;

打破

与break指令一样,停止处理当前的ngx_http_rewrite_module指令集;

因此,如果您不想在下一个循环中搜索重写的URL以匹配规则,则应使用break

中断指令:

停止处理当前的ngx_http_rewrite_module指令集。

如果在位置内指定了指令,则在该位置继续对请求的进一步处理。

这类似于URL Rewriter行为:

规则可能已启用StopProcessing标志。 启用此标志时,意味着不再处理任何后续规则,并且此规则生成的URL将传递到IIS请求管道(如果规则匹配)。 默认情况下,此标志是关闭的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM