说下出现这个错误的场景:
有一个用户通过(QQ或者微博)登陆,这时wecenter在绑定账号时,是没有验证用户名是否会出现特殊字符(比如:/ 之类的字符),所以最后通过第三方登陆账号注册的用户,用户名中出现特殊字符则不会被过滤掉(通过wecenter注册则会被验证掉)。
 
因为我启用了伪静态,那么请求的用户信息地址就变成了:www.wecenter.com/people/用户名
比如我注册的账号是kid,地址就是:www.wecenter.com/people/kid
如果通过第三方登陆账号登陆,出现特殊字符串,比如我的微博名为kid_/K,就会出现:www.wecenter.com/people/kid_/K
这时wecenter已经对url进行了编码,处理之后变成了:www.wecenter.com/people/kid_%2fK
这个%2f转义之后就是 / ,如果你在访问这个URL,apache 就会报404错误。
 
原因是因为apache现在默认是不启用 %2f 转义,必须自己手动开启才行。需要修改apache的配置文件。
详细配置信息参照这个网址:www.2cto.com/os/201409/338511.html
 
主要是添加AllowEncodedSlashes On,我的配置文件:
<VirtualHost 127.0.0.1:80>
    DocumentRoot "/xxxx/"
    AllowEncodedSlashes On
    DirectoryIndex index.html index.php
    ServerName www.xxxx.com
    ErrorLog "logs/www.xxxx.com-error_log"
    CustomLog "logs/www.xxxx.com-access_log" combined
    <Directory "/xxxx/">
    Options -Indexes +FollowSymlinks
    AllowOverride FileInfo Options
    Require all granted
    </Directory>
</VirtualHost> 
                                                                
                                     阅读全文
                                
                                
                                     收起全文