Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[教程] ISAPI_Rewrite 3.x Url 编码问题——Discuz! URL 静态化“您指定的用户空间不存在”

[复制链接]
netbarghost 发表于 2011-5-25 18:34:32 | 显示全部楼层 |阅读模式
本帖最后由 netbarghost 于 2011-8-10 18:43 编辑

转自:http://bbs.netbarghost.com/thread-129-1-1.html(网吧幽灵)

Discuz! X2 中,Rewrite 规则URL 静态化 如下
  1. RewriteRule ^(.*)/topic-(.+)\.html(\?(.*))*$ $1/portal\.php\?mod=topic&topic=$2&$4

  2. RewriteRule ^(.*)/article-([0-9]+)\.html(\?(.*))*$ $1/portal\.php\?mod=view&aid=$2&page={page}&$5

  3. RewriteRule ^(.*)/forum-(\w+)-([0-9]+)\.html(\?(.*))*$ $1/forum\.php\?mod=forumdisplay&fid=$2&page=$3&$5

  4. RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html(\?(.*))*$ $1/forum\.php\?mod=viewthread&tid=$2&extra=page\%3D$4&page=$3&$6

  5. RewriteRule ^(.*)/group-([0-9]+)-([0-9]+)\.html(\?(.*))*$ $1/forum\.php\?mod=group&fid=$2&page=$3&$5

  6. RewriteRule ^(.*)/space-(username|uid)-(.+)\.html(\?(.*))*$ $1/home\.php\?mod=space&$2=$3&$5

  7. RewriteRule ^(.*)/blog-([0-9]+)-([0-9]+)\.html(\?(.*))*$ $1/home\.php\?mod=space&uid=$2&do=blog&id=$3&$5

  8. RewriteRule ^(.*)/(fid|tid)-([0-9]+)\.html(\?(.*))*$ $1/index\.php\?action=$2&value=$3&$5
复制代码
服务器上安装的是
ISAPI_Rewrite 3.x

配置完成之后,发现,点击论坛页面中的中文用户名(本应进入用户的空间),却提示:
  1. 您指定的用户空间不存在
复制代码
后台中 Rewrite 兼容性 设置为“是”或“否”,问题依然存在。

尝试用动态访问
http://www.netbarghost.com/home.php?mod=space&username=%D3%EA%CE%C4
很正常,用静态化之后的地址
http://www.netbarghost.com/space-username-%D3%EA%CE%C4.html
就提示:“您指定的用户空间不存在”

为了防止浏览器不识别中文url,Discuz!是用UrlEncode编码了用户名。
想想,“%D3%EA%CE%C4”是按gb2312编码的,换成utf-8试试
http://www.netbarghost.com/space-username-%e9%9b%a8%e6%96%87.html

果然,就能访问了。

查阅 ISAPI_Rewrite 3.x 的帮助文档得知:
  1. nounicode|NU


  2. If NU flag is set, transformation from Unicode to UTF-8 will not take place and all Unicode characters remain encoded in %xx format.


  3. 如果设置NU标志,不会把Unicode编码转换为UTF-8,所有Unicode字符编码保持%xx格式。
复制代码
原来 ISAPI_Rewrite 3.x 默认输入格式是utf-8。

我们在 用户个人主页 的静态规则后加上[NU],就能解决问题了
  1. RewriteRule ^(.*)/space-(username|uid)-(.+)\.html(\?(.*))*$ $1/home\.php\?mod=space&$2=$3&$5 [NU]
复制代码
现在启用 用户个人主页 的静态规则,OK,搞定。
jlbccf 发表于 2011-5-30 11:23:54 | 显示全部楼层
试试
看看能否解决我的问题
回复

使用道具 举报

乏味 发表于 2011-6-1 09:46:14 | 显示全部楼层
非常感谢,解决了问题。
回复

使用道具 举报

stcv66 发表于 2011-6-3 09:15:44 | 显示全部楼层
站位!
回复

使用道具 举报

猪的胡子 发表于 2011-7-13 12:34:07 | 显示全部楼层

事实证明我失败了。
www.jwteam.cn
回复

使用道具 举报

ylkywb 发表于 2011-7-14 19:06:41 | 显示全部楼层
我是IIS win2003主机,后台选择否就OK了
回复

使用道具 举报

 楼主| netbarghost 发表于 2011-7-15 13:34:19 | 显示全部楼层
ylkywb 发表于 2011-7-14 19:06
我是IIS win2003主机,后台选择否就OK了

那是因为你用的不是ISAPI_Rewrite 3.x
回复

使用道具 举报

287001840 发表于 2011-8-20 00:33:25 | 显示全部楼层
哈哈 特意来感谢楼主的,问题解决了 非常感谢
回复

使用道具 举报

jsbba 发表于 2011-8-21 09:11:03 | 显示全部楼层
好贴 谢谢楼主
回复

使用道具 举报

yanzi315 发表于 2011-8-22 15:19:41 | 显示全部楼层
易网知识库 >>所属分类 >> Discuz   
IIS7下伪静态无法访问discuz X2.0中文用户名空间 编辑词条 发表评论(0)
本文将解决在IIS7下无法访问Discuz X2.0中文用户名空间

  易网库服务器的操作系统是Windows Server 2008,自带IIS7,支持伪静态,只需要在网站根目录下创建一个web.config文件并把伪静态规则代码放入其中就可以了。

    对于Discuz X2.0论坛,很多用户开启伪静态并且当用户的用户名是中文时,点击首页的中文用户名或访问中文用户名的空间会出现“404错误信息(后台的Rewrite兼容性选[是])”或“指定用户空间不存在(后台的Rewrite兼容性选[否])”,而且浏览器上的地址栏显示一大串像乱码一样的字符,如:http://www.webweb.com/space-username-Mr%25C3%25E6%25BE%25DF000.html

主要原因: 当对url中的非英文字符进行了2次转码(encode),IIS7为了安全,会自动拦截。

具体解决方法:您需要在网站根目录下的web.config文件中的<system.webServer>和</system.webServer>之间加以下代码:

<security>
   <requestFiltering allowDoubleEscaping="true" />
</security>
保存后应该就可以了。

请注意:更改此设置,会降低网站本身的安全性,为恶意攻击者增加便利!
这个也是一种解决办法
备注:服务器环境:windows2008 下自带的IIs7 ,iis7自带的重写
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-12-28 05:30 , Processed in 0.031352 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表