最近在对一个Discuz!NT论坛的老项目进行维护和二次开发,遇到了论坛无法上传头像的问题。在网上找了相当多的资料,发现解决的方法基本是无效的。虽然有的状况一样,但是没有解决方法,后来自己研究了下也总算是解决了这个问题。
首先说明下出现无法上传头像的具体症状,大概的症状有下面这几点:
再说下网上说的大部分情况,这里只做参考,毕竟我们的情况和下面关系不太大:
网上的说所的大部分情况都是PHP版的Discuz,自从2010年Discuz被腾讯收购以后,不仅Discuz!Nt论坛打不开,而且直到今天也都没有新版本更新。所以有些问题都不知道如何解决,只能自己摸索和研究!就像我遇到的这个Flash无法上传头像的问题,其实最后是需要更改下源代码的,网上基本找不到解决方法。
主要原因是Discuz!Nt中是有启用URL重写,而项目代码中的Url重写模块有屏蔽掉上传头像的默认图片保存路径,如果访问了上传头像的默认图片路径,是无法打开的图片的,URL会被转移到首页,所以无论如何头像都无法上传成功。
我们看下论坛源码项目中Web.config配置文件对重写模块的配置:
<httpModules>
<add type="Discuz.Forum.HttpModule, Discuz.Forum" name="HttpModule" />
</httpModules>
然后我们在项目中打开自定义的HttpModule类(位置在Discuz.Forum/HttpModule.cs),我们找到下面这段代码(我的项目是在284行,大家自己搜索下):
else if (requestPath.StartsWith(forumPath + "upload/") || requestPath.StartsWith(forumPath + "space/upload/") || requestPath.StartsWith(forumPath + "avatars/upload/"))
{
context.RewritePath(forumPath + "index.aspx");
return;
}
我们可以看到在URL重写模块中,只要网页中请求的路径是"upload"、"space/upload/"和"avatars/upload/"这三个文件夹,那么就会将请求的URL重写到网站首页,导致无法获取正确的头像图片URL,错误的头像图片路径造成图片无法正常打开,所以上传头像后会毫无反应。
另外其中的"upload"文件夹和"avatars/upload/"文件夹都是和头像有关的,我们可以尝试下随便在这两个文件夹下放置一张图片,然后我们在浏览器中直接访问这张图片的URL,我们可以发现图片是打不开的,因为被做了URL重写。
所以最后我是将这段代码做了注释,运行论坛发现头像已经可以正常的上传了!
作者:十有三
出处:https://shiyousan.com/post/635523343543614808
版权声明:本文采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。欢迎转载本文,转载请声明出处或保留此段声明。