zoukankan      html  css  js  c++  java
  • 再谈Nginx Rewrite, 中文URL和其它

    上次谈到过Nginx和中文URL的问题,这几天又加深了认识。 多分享几个关于Nginx Rewrite的经验。

    Nginx匹配指定中文URL的方法:

    rewrite "(*UTF8)^x{66f4}x{6539}$" /index.html last;

    这个会将 http://www.cslog.cn/%E6%9B%B4%E6%94%B9 重定向到http://www.cslog.cn/index.html。
    ‘/%E6%9B%B4%E6%94%B9′是中文URL ‘/更改’, x{66f4}x{6539}是这两个汉字的Unicode编码。

    注意配合PCRE 7.9以上版本使用,详细看Nginx和中文URL的问题

    Nginx匹配URL中中文参数的方法:
    如果要将 http://www.cslog.cn/index.php?title=%E6%9B%B4%E6%94%B9 重定向到http://www.cslog.cn, 则要使用

    location = /index.php$ {
    if ($args_title =%E6%9B%B4%E6%94%B9 ) {
    rewrite ^ /;
    }
    }

    在这里, ‘?title=%E6%9B%B4%E6%94%B9′ 是不能用上例那里的rewrite捕捉到的, 而要使用$arg_参数名这样的方式处理。 而且在这里, ‘%E6%9B%B4%E6%94%B9′是不用特别转换的,直接放上去就可以了。

    还要注意到 location后面的 ~, *~, ^~, =或空是有不同的效果的。详细参看nginx的官方手册

    让Nginx在同时识别到两个参数的情况下重定向的方法
    假设要在例如 http://www.cslog.cn/index.php?title=%E6%9B%B4%E6%94%B9&lang=Zh-tw 这样的URL,只有在lang=Zh-tw参数存在,并且title参数也存在(不管它的值)的情况下才重定向, 要求会苛刻些,因为nginx自身没有并列的逻辑处理能力,但可以使用如下的方法曲线解决:

    location = /index.php {
    set $redirect "";

    # 检查是否存在"title"参数:
    if ( $arg_title ) {
    set $redirect "Y";
    }

    # 检查lang参数是否为 "Zh-tw":
    if ( $arg_lang =Zh-tw ) {
    set $redirect "${redirect}ES";
    }

    # 看看条件是否同时成立 "YES":
    if ( $redirect = YES ) {
    rewrite ^ / last;
    }

    ....
    }

    转载请注明: 转自船长日志, 本文链接地址: http://www.cslog.cn/Content/nginx-rewrite-chinese/

  • 相关阅读:
    自我介绍
    最大连通子数组求和
    敏捷开发方法综述
    第四周学习进度条
    时间日志和缺陷日志
    最大子数组2.0
    最大子数组1.0
    第三周学习进度条
    小学四则运算3.0
    单元测试
  • 原文地址:https://www.cnblogs.com/archoncap/p/4861283.html
Copyright © 2011-2022 走看看