精华内容
下载资源
问答
  • NGINX中URL路径包含中文,会出现404的情况,即使指定配置文件中使用GBK/UTF-8也没用,网上也没用任何有用的资料答案,我翻遍了谷歌和百度。 以下是我解决方案,执行环境是win10+nginx 1.160: 我找了很多的解决...

       NGINX中URL路径包含中文,会出现404的情况,即使指定配置文件中使用GBK/UTF-8也没用,网上也没用任何有用的资料答案,我翻遍了谷歌和百度。

     以下是我解决方案,执行环境是win10+nginx 1.160:

      我找了很多的解决方案就是:将window的编码改为UTF-8模式,然后将NGINX也指定为UTF-8,如果不指定一样会出现乱码。

      windows 10 修改编码方式参考:https://jingyan.baidu.com/article/25648fc1471e6a9191fd002e.html

      结尾分析:就是编码要保持一致,和很多nginx中文URL路径404乱码LIUNX解决方案差不多的,运行环境编码和NGINX编码一致。

    展开全文
  • Atitit.404错误解决标准流程and url汉字中文路径404错误resin4 resin chinese char path 404 err解决.pdf
  • 主要介绍了访问编码后的中文URL返回404错误的解决方法,本文使用的是替换方法,当然也可以使用加密方法来解决,最后附妹子图一张,需要的朋友可以参考下
  • Tomcat含有中文url访问404

    千次阅读 2018-12-24 10:49:57
    1.问题描述:由于项目中有中文路径,或者有中文图片导致访问404 2.解决方案:  若是Linux环境,修改.../Tomcat/Tomcat/conf/server.xml文件  若是eclipse环境,修改...Servers/server.xml文件 <...

    1.问题描述:由于项目中有中文路径,或者有中文图片导致访问404

    2.解决方案:

         若是Linux环境,修改.../Tomcat/Tomcat/conf/server.xml文件

         若是eclipse环境,修改...Servers/server.xml文件

    <Service name="Catalina">
        <Connector connectionTimeout="20000" port="8081" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true" URIEncoding="UTF-8"/>
        <Connector port="8090" protocol="AJP/1.3" redirectPort="8443"/>
    
        <Engine defaultHost="localhost" name="Catalina">
    
    
          <Realm className="org.apache.catalina.realm.LockOutRealm">
    
            <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
          </Realm>
    
          <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
    		
          <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." suffix=".txt"/>
    
          <Context docBase="QLULottery" path="/QLULottery" reloadable="true" source="org.eclipse.jst.jee.server:QLULottery"/></Host>
        </Engine>
      </Service>

    添加:

    useBodyEncodingForURI="true" URIEncoding="UTF-8"

     

    另外,如果是springmvc,注意上传的编码格式

    <bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 默认编码 -->
    <property name="defaultEncoding" value="UTF-8" />
    </bean>
    

     

     

     

     

     

    展开全文
  • nginx 中文url rewrite 404

    千次阅读 2018-01-08 11:27:00
    并不是此处描述的url中文404,请注意区分。 首先来看nginx 配置 server{ listen 8089; server_name 172.19.23.208; if ($uri ~* ^/(.+?)/(.*) ) { set $domain $1; set $user_uri /$2; rewrite ^(.*)$ $...

    nginx url中包含中文时,在rewrite中使用不当,造成404

    原料

    nginx --with-debug或openresty

    背景

    项目中有用户图片库需求,允许用户自定义文件夹,然后上传图片到该文件夹。 当用户自定义的文件夹为中文或者访问url中包含中文时,资源无法访问,返回404的状态码

    分析过程

    排除系统编码问题。

    [root@slave2 ~]# locale
    LANG=en_US.UTF-8
    LC_CTYPE="en_US.UTF-8"
    LC_NUMERIC="en_US.UTF-8"
    LC_TIME="en_US.UTF-8"
    LC_COLLATE="en_US.UTF-8"
    LC_MONETARY="en_US.UTF-8"
    LC_MESSAGES="en_US.UTF-8"
    LC_PAPER="en_US.UTF-8"
    LC_NAME="en_US.UTF-8"
    LC_ADDRESS="en_US.UTF-8"
    LC_TELEPHONE="en_US.UTF-8"
    LC_MEASUREMENT="en_US.UTF-8"
    LC_IDENTIFICATION="en_US.UTF-8"
    LC_ALL=
    [root@slave2 ~]# env|grep LANG
    LANG=en_US.UTF-8
    

    nginx编码 当我们在网页中不指定编码类型时,默认为gbk编码.可以通过在nginx中添加默认的编码方式

    Syntax:     charset charset | off;
    Default:    charset off;
    Context:    http, server, location, if in location
    

    此处设置的charset会在response header中Content-Type:text/html;charset=utf-8来体现 或者在网页中指定编码类型:<meta http-equiv="content-type" content="text/html;charset=utf-8">

    注:网上大多教程为页面中文乱码问题。并不是此处描述的url中文404,请注意区分。

    首先来看nginx 配置

    server{
        listen 8089;
        server_name 172.19.23.208;
        if ($uri ~*  ^/(.+?)/(.*) ) {
            set $domain $1;
            set $user_uri  /$2;
            rewrite ^(.*)$  $user_uri last;
        }
        location / {
            proxy_set_header Host $domain;
            proxy_pass            http://127.0.0.1:8087;
    
        }
    }
    

    开启nginx debug模式,源码包安装时加上--with-debug参数,或者使用oenresty-debug包。 构造访问url:http://172.19.23.208:8089/www.test.com/猴哥/a.html 发起访问,同时我们侦测nginx debug日志。 这里选取主要的日志如下

      1      2017/06/22 17:16:41 [debug] 8389#0: *44 http request line: "GET /www.test.com/%E7%8C%B4%E5%93%A5/a.html HTTP/1.1"
      2      2017/06/22 17:16:41 [debug] 8389#0: *44 http uri: "/www.test.com/猴哥/a.html"
      3      2017/06/22 17:16:41 [debug] 8389#0: *44 http script var: "/www.test.com/猴哥/a.html"
      4      2017/06/22 17:16:41 [debug] 8389#0: *44 http script regex: "^/(.+?)/(.*)"
      5      2017/06/22 17:16:41 [notice] 8389#0: *44 "^/(.+?)/(.*)" matches "/www.test.com/猴哥/a.html", client: 172.19.23.33, server: 172.19.23.208, request: "GET /www.test.com/%E7%8C%B4%E5%93%A5/a.html HTTP/1.1", host: "172.19.23.208:8089"
      6      2017/06/22 17:16:41 [debug] 8389#0: *44 http script if
      7      2017/06/22 17:16:41 [debug] 8389#0: *44 http script capture: "www.test.com"
      8      2017/06/22 17:16:41 [debug] 8389#0: *44 http script set $domain
      9      2017/06/22 17:16:41 [debug] 8389#0: *44 http script copy: "/"
     10      2017/06/22 17:16:41 [debug] 8389#0: *44 http script capture: "%E7%8C%B4%E5%93%A5/a.html"
     11      2017/06/22 17:16:41 [debug] 8389#0: *44 http script set $user_uri
     12      2017/06/22 17:16:41 [debug] 8389#0: *44 http script regex: "^(.*)$"
     13      2017/06/22 17:16:41 [notice] 8389#0: *44 "^(.*)$" matches "/www.test.com/猴哥/a.html", client: 172.19.23.33, server: 172.19.23.208, request: "GET /www.test.com/%E7%8C%B4%E5%93%A5/a.html HTTP/1.1", host: "172.19.23.208:8089"
     14      2017/06/22 17:16:41 [debug] 8389#0: *44 http script var: "/%E7%8C%B4%E5%93%A5/a.html"
     15      2017/06/22 17:16:41 [debug] 8389#0: *44 http script regex end
     16      2017/06/22 17:16:41 [notice] 8389#0: *44 rewritten data: "/%E7%8C%B4%E5%93%A5/a.html", args: "", client: 172.19.23.33, server: 172.19.23.208, request: "GET /www.test.com/%E7%8C%B4%E5%93%A5/a.html HTTP/1.1", host: "172.19.23.208:8089"
    
    1 原始请求
    2 对应nginx变量$uri,可以看出$uri为解码过后的值
    3 http脚本变量值"/www.test.com/猴哥/a.html" 此处为$uri
    4 对应nginx配置文件中if后的正则表达式
    5 测试if条件,结果为matches
    6 进入if块
    7,8,9,10,11 nginx变量捕获到值并进行set,注意在'https://github.com/nginx/nginx/blob/master/src/http/ngx_http_script.c', 函数ngx_http_script_copy_capture_code中
    
        if ((e->is_args || e->quote) && (e->request->quoted_uri || e->request->plus_in_uri))
            {
                e->pos = (u_char *) ngx_escape_uri(pos, &p[cap[n]],
                                                   cap[n + 1] - cap[n],
                                                   NGX_ESCAPE_ARGS);
            } else {
                e->pos = ngx_copy(pos, &p[cap[n]], cap[n + 1] - cap[n]);
            }
    确定了哪些条件会ngx_escape_uri,很明显中文编码在这些条件中。
    注意此处我们得到了编码过后的$user_uri="%E7%8C%B4%E5%93%A5/a.html"
    12,13,14,15,16
    rewrite指令匹配然后使用已捕获的变量进行rewrite
    

    梳理下:用户在浏览器中访问http://172.19.23.208:8089/www.test.com/猴哥/a.html ,由于url中有中文,浏览器自动将其就行urlencode(用户可见与真实url已经存在差异),这是第一次,然后 nginx得到用户请求后开始uri解析,$request_uri="/www.test.com/%E7%8C%B4%E5%93%A5/a.html" 该变量是不会变化的。$uri="/www.test.com/猴哥/a.html" 该变量表示当前请求的uri,在发生内部跳转,或者索引文件时可以被改写。 然后通过if的匹配,就行变量的捕获这些这都正常。但是set指令对应逻辑中有ngx_escape_uri操作,也就是上面说到的7-11步。最后进行rewrite操作,注意此处rewrite的是$user_uri(/%E7%8C%B4%E5%93%A5/a.html)的值。此处有两次内部跳转,一次为rewrite,第二次为proxy_pass 第二次proxy_pass可以理解为正常用户通过浏览器访问(进行一次urlencode("%E7%8C%B4%E5%93%A5"-->'%25E7%258C%25B4%25E5%2593%25A5')),nginx收到请求为 "GET /%25E7%258C%25B4%25E5%2593%25A5/a.html?b=2 HTTP/1.0", 后面的逻辑便和之前相同。如果该资源为本地文件,nginx使用$uri(/%E7%8C%B4%E5%93%A5/a.html)进行文件查找,结果便为404。其他proxy_pass逻辑也会出现404问题。

    (需要说明nginx中$request_uri和$uri,前者代表包含参数且未进过解码的链接后者为解码后未包含参数的链接,顺便提一点,如果我们在日志中打印nginx变量$request_uri和$uri会的到相同的值,这是因为在nginx的log模块中也进行了escape操作。两者的值可以通过nginx debug日志看出差异。)

    解决方案

    既然此种需求问题在set指令时对url就行了ngx_escape_uri,我们只需在其之后就行unescape_uri便可。

    server{
        listen 8089;
        server_name 172.19.23.208;
        if ($uri ~*  ^/(.+?)/(.*) ) {
            set $domain $1;
            set $user_uri  /$2;
            set_by_lua_block $new_url {
                    return ngx.unescape_uri(ngx.var.user_uri)
                }
            rewrite ^(.*)$  $new_url last;
        }
        location / {
            proxy_set_header Host $domain;
            proxy_pass            http://127.0.0.1:8087;
    
        }
    }
    

    这里使用openresty的ngx.unescape_uri方法实现 或者使用第三方模块ngx_set_misc 的set_unescape_uri。

    set_unescape_uri $new_url $user_uri;
    

    转载于:https://my.oschina.net/monkeyzhu/blog/1603843

    展开全文
  • Atitit.404错误解决标准流程and url汉字中文路径404错误resin4 resin chinese char path 404 err解决   1. #原因解析 1 2. #解决方式 2 3. 输出图片流... 2 4. --code 2 5. 参考 3     ...

    Atitit.404错误解决标准流程and url汉字中文路径404错误resin4 resin chinese char path 404 err解决

     

    1. #原因解析 1

    2. #解决方式 2

    3. 输出图片流... 2

    4. --code 2

    5. 参考 3

     

     

    1. #原因解析


    查看累挂发送d url,,,俄使用的是ff..它把url转换成个 http://localhost/img/QQ%E6%88%AA%E5%9B%BE20140401175433.jpg 发送出去..每汉字3%字符,所以,表明是utf8编码的url..


    服务端使用d resin4,估计不使用utf decodes..

     

    作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

    转载请注明来源: http://blog.csdn.net/attilax

     

     

    只要在"resin.conf"里面把"static-encoding"设为"false"就一切OK(这样resin服务器好像不为JSP转换什么编码,显示任务仍了给浏览器。)。
    "request.setCharacterEncoding("GBK")"和<%@ page language="java" pageEncoding="GBK"%gt;都不用设置,数据库连接也不必加"useUnicode=true,characterEncoding=GBK"这种参数。(如果已经设置了,就应该全部删掉,在Tomcat上跑的时候是需要这些。)
    这种方法可能产生的一个问题是:在JavaGUI或者在控制台输出文字的时候因为编码没有转换过而显示乱码。这时候可以对文字做转码,如"new String(myString.getBytes("ISO-8859-1"))"。
    不过一个BS系统如果不包括JavaGUI,那就可以省很多中文处理的工作量。
    此方法,对字符串的对比和模糊查询都有效。


    2. #解决方式

     


    1.更改resin4 cfg ,设置utf8url参数解析....se,设置lei 不起效果...只好自己解决le ..
    2.urlrewrtite>>servlet ,自己解析url参数,输出图片流...

    一个filter

     

    思路::filere>>urldecode>>img io》》output  servlet

     

    3. 输出图片流...

    String f=pathx.webAppPath()+File.separator+url2;

    BufferedImage bi = ImageIO.read(new File(f));

     

    ImageIO.write(bi"jpg"response.getOutputStream());

     

    如果使用传统jdkstream太麻烦蓝。。。

    4. --code

     

     

    /vod2/src/com/focusx/util/EncodingFilter.java

    public void doFilter(ServletRequest request, ServletResponse response,

    FilterChain chainthrows IOException, ServletException {

    HttpServletRequest req=(HttpServletRequest) request;

    String requestURL = req.getRequestURL().toString();

    //http://localhost:8080/vdx/static/%E8%9D%99%E8%9D%A0%E4%BE%A0-%E9%BB%91%E6%9A%97%E9%AA%91%E5%A3%AB.jpg

    try {

    //must in try ..cause youed png d ,ext sh jpgd ,output d siheur .erro...

    if(requestURL.endsWith(".jpg"))

    {

    requestURL=requestURL.replaceAll("http://""");

    int idx=requestURL.indexOf("/");

    String s=requestURL.substring(idx+1);

    int idx2=s.indexOf("/");

    String url2=s.substring(idx2+1);

    //%E8%9D%99%E8%9D%A0%E4%BE%A0-%E9%BB%91%E6%9A%97

    url2=URLDecoder.decode(url2,"utf-8");

    String f=pathx.webAppPath()+File.separator+url2;

    BufferedImage bi = ImageIO.read(new File(f));

     

    ImageIO.write(bi"jpg"response.getOutputStream());

    return;

    }

    catch (Exception e) {

    // TODO: handle exception

    }

    core.log("--loadorderO9::EncodingFilter");

    //用init方法取得的charset覆盖被拦截下来的request对象的charset  

            request.setCharacterEncoding(this.charset);  

            //将请求移交给下一下过滤器,如果还有的情况下。  

            chain.doFilter(requestresponse);  

    }

     

    5. 参考

    paip.解决中文url路径的问题图片文件不能显示 - attilax的专栏 博客频道 - CSDN.NET.html

    Resin的中文问题最简单的解决方法 - Thinking In Jdon.html

    展开全文
  • Atitit.404错误解决标准流程andurl汉字中文路径404错误resin4resinchinesecharpath404err解决 1.#原因解析 1 2.#解决方式 2 3.输出图片流... 2 4.--code 2 5.参考 3 1.#原因解析 查看累挂发送...
  • url路径包含中文显示404错误

    千次阅读 2019-06-12 11:21:38
    url路径包含中文的时候,浏览器会自动采用UTF-8对路径进行编码,而服务器(本例中是tomcat,不同服务器的实际可能有差异,但原理差不都)默认是采用ISO-8859-1来对url路径进行解码,此时往往会出现404,如以下例子...
  • 一、中文URL 这个问题主要表现为,在默认情况下,Wordpress对于形如这样的链接(链接1): www.phpcode8.com/tag/中文 不能正常访问,会产生404或500错误,或者其他的错误。 而对于这样的链接(链接2): ...
  • tomcat请求含有中文参数的url提示404

    千次阅读 2019-03-19 14:00:18
    访问这个url会报404没有找到.设置URIEncoding="UTF-8"才会访问到这个servlet,因为URIEncoding默认采用iso-8859-1编码 useBodyEncodingForURI所代表的意思:queryString的编码规则,也就是get参数编码规则,不设置...
  • 新建重写规则: <rule name="ChineseURL" stopProcessing="true">...match url="^(tag|category)/(.*)$" /> <action type="Rewrite" url="chineseurl.php" /> </rule> chineseu...
  • Atitit.url 汉字中文路径404resin4 resin 解决v2 q329 1. Pluginx机制1 2. Code1 3. 参考4 1.原理 过滤器 ,,拦截jpg with %的url...read img ,直接输出.. 2.Pluginx机制 //if() if(inied==...
  • Windows2008R2 IIS7.5伪静态URL传递中文404

    千次阅读 2017-05-24 17:33:10
    在iis7.5下get传递已经urlencode过中文参数,在nginx和Apache下都没问题,今天到了iis上却出现了404, 究其原因是iis不支持带特殊字符的链接,在web.config 里面加入下面配置: 重启网站就解决...
  • 昨晚同事说之前给的接口不能get方式的,直接在ie浏览器访问返回404,说明是参数有问题。  同样的接口使用curl和postman请求都正常,其他ie之外的浏览器也都正常响应。  记录下排查过程:  问题1:url少写了/ ...
  • 目录结构不符合要求,Controller包必须和AppApplication.java同级,因为@SpringBootApplication默认会去扫描同级目录或者子集目录下的所有类。
  • 但是中文的情况比较让人头疼,每次都会跳转到404页面。 经过一阵子的度娘和谷歌之后终于找到了完美解决URL中出现中文的办法: 打开wordpress\wp-includes目录下的class-wp.php文件。替换一小段代码即可: if ( is...
  • 使用ie浏览器,当get请求访问url中含有中文时,就会返回404. 为什么firfox和chrome就没有这个问题呢? 对比后你会发现浏览器地址栏中firfox和chrome把中文都转换成了%E....什么的东西,然后copy到ie也能正常访问了. 这...
  • Rewrite规则:RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]Url中有Unicode编码包含有”\x85”的汉字字节(即encode后包含“%85”的汉字, 如:“关”、 “兲“、 “共“、 “兰“、 “儰”、 “䅰”、 “腰” 等),...
  • 1、修改$tomcat_home/conf/server.xml,增加下面的加粗部分: URIEncoding="UTF-8"   connectionTimeout="20000"  redirectPort="8443" URIEncoding="UTF-8" /> 2、执行下面命令,编辑本地语言环境 ...
  • iframe url包含中文 导致页面404问题

    千次阅读 2019-05-17 11:08:34
    今天调试,动态复制iframe时,跳转的页面一直显示404, var _src = 'modules/classify/addModule.html?catId=' + catId + "&catName=" + catName + "&resId=" + resId + "&resTitle=" + resTitle; ...
  • thinkphp url404问题

    2019-04-30 12:25:29
    如果是用nginx 也许是因为要修改一个nginx.conf文件 location ~ \.php { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastc...
  • 前端代码,行内onclick事件调用方法,传参 function cvInfo(objId,jobId,statu){ ...//前台用encodeURI()方法对中文参数进行两次转码 window.location.href="${ctx}/ResumeSerach/getDetailOnNav?jb_cv_i
  • * URL中文字符编码转换 * @param url 含中文字符的URL * @return */ public static String getChineseURICode(String url){ if(ValidateUtil.isEmpty(url)) throw new AppException("URL cannot ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,545
精华内容 11,818
关键字:

url中文404