说下出现这个错误的场景:
有一个用户通过(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>
阅读全文
收起全文