IIS中无点文件导致404错误

11

我在我的开发Cassini服务器上(使用dotless)成功地使用.less文件已经几周了,但是当我发布到本地的IIS服务器时,它们会产生404错误。将我的调试器附加到IIS没有得到任何异常信息。我也重新启动了我的IIS应用程序池和服务器。

有什么想法吗?

2个回答

31

看起来你在IIS上缺少一个mime类型。

对于IIS7,请在你的web.config中添加以下内容:

<system.webServer>
    <staticContent>
        <mimeMap fileExtension=".less" mimeType="text/css" />
    </staticContent>
</system.webServer>

对于 IIS6,您可以这样做(假定您具有管理员 RDP 访问权限):

cscript adsutil.vbs set W3SVC/1/Root/MimeMap ".less, text/css"

其中/1/是站点的IIS编号。


1
你干得漂亮,谢谢!Stackoverflow再次拯救了我们。 - sisdog
1
非常喜欢。我喜欢即时解决方案。 - vvohra87
对于IIS6,我必须使用cscript c:/Inetpub/AdminScripts/adsutil.vbs set W3SVC/1/Root/MimeMap ".less, text/css" - Myster
我用这个修复方法就是没有结果。它让我抓狂了。在cassini上一切都正常,但是当我发布到IIS 7上时就不行了。 - nlinus
@nlinus - 你也可以考虑使用appcmd设置MIME类型 - http://technet.microsoft.com/zh-cn/library/cc725608(v=ws.10).aspx - 我同时使用了web.config webServer节点添加和appcmd。 - Kurt Johnson
谢谢 Kurt。Kev的答案解决了问题,但我也喜欢你的补充。 - nlinus

8
我很晚才加入此讨论,希望能对这个问题提供一些帮助。我遇到了相同的症状,之前提到的解决方法对我没有用。但是,我找到了另一个原因和解决方法。
在我的情况下,404响应中包含以下消息:
/* Error Occurred. Consult log or view on local machine. */
这似乎表明less文件确实被找到,并且请求正在由dotLess处理(该消息可以在dotLess的源代码中找到),但在处理请求时发生了FileNotFoundException。
我追踪了问题,发现@import语句引用了一个在IIS服务器上神秘地不存在的.less文件,尽管它在开发服务器下存在。
原来,这个有问题的.less文件的构建操作设置为None,而不是像项目中所有其他.less文件一样设置为Content。
那么,下一个合理的问题是为什么构建操作不正确?
嗯,我把文件添加为.css文件,然后决定将其导入到.less文件中,因此将其重命名为.less(因为.css是.less的子集,但less不会导入css文件)。我用一个新的.css文件重复这个过程,发现问题可以再现。
看起来,Visual Studio会将构建操作从Content更改为None,作为将.css重命名为.less的意外副作用。因此,重命名的.less文件不会发布到IIS服务器。

1
感谢 +1,我遇到了同样的问题,将一些框架转换为.less时,我一直无法弄清楚为什么会产生404错误,直到我从VS发布中删除了所有文件。 - Ben Sewards
是的,我也被困扰了。忘了将一个新的.less文件添加到SVN中,这个文件本应该被@import引用。 - rwalter
哇,这花了我太长时间才弄清楚。我的主样式表没有被编译到我的 less 构建中,我不知道为什么。谢谢。 - user3155561

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接