IIS:如何提供没有扩展名的文件?

73
我正在使用Windows 8.1上的IIS 8。 我有一个XML文件,需要通过(servername)/(path)访问。(path)由他人预定义,不包含扩展名。我尝试了简单的解决方案,即删除文件名的.xml后缀,但是IIS返回HTTP错误404.3-未找到。
在返回的错误消息中,“实际路径”是正确的文件路径,当我将其复制粘贴到运行中时,会打开正确的文件。
请告知是否可能实现这一点。

1
一个解决方案是将文件放在(路径)\index.html下提供服务吗? - mwfearnley
很奇怪,高票答案未被采纳。 - Lex Li
4个回答

142

假设(path)是您的计算机上的物理目录,请在该目录中创建一个名为web.config的新文件,并添加以下内容:

<?xml version="1.0" encoding="UTF-8"?>
 <configuration>
     <system.webServer>
         <staticContent>
             <mimeMap fileExtension="." mimeType="text/xml" />
         </staticContent>
     </system.webServer>
 </configuration>
你正在告诉IIS,仅针对此目录,任何没有明确定义的扩展名(在MIME类型中)的文件都应被视为xml文件。相同路径下的其他文件类型仍应正常工作。
如果你安装了Windows功能" IIS管理脚本和工具",你可以使用PowerShell创建这样的web.config文件:
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST/Default Web Site/.well-known'  -filter "system.webServer/staticContent" -name "." -value @{fileExtension='.';mimeType='text/xml'}
在这个例子中,Default Web Site是网站的名称,.well-known是该网站下的一个目录。

49
对我来说,fileExtension=".*"无法工作,但fileExtension="."可以。 - rustyx
8
这个答案帮助我正确设置了iOS通用链接的apple-app-site-association文件,使其可以被我的网站正常提供。非常感谢! - Nikhil Mathew
@NikhilMathew 你用什么MIME类型来提供你的apple-app-site-association文件?我可以看到该文件,但不确定苹果期望使用什么MIME类型。如果您的文件已加密,则应用程序/pkcs7-mime为正确类型,但据说您不需要这样做,因此我不确定如何为我的非加密文件使用哪种类型。 - lehn0058
2
没事了,我发现使用 application/json 就可以了 :) - lehn0058
很棒的答案。这在IIS5上不起作用(我正在迁移遗留应用程序并遇到了一个问题!);但是对于那个@RBT的解决方案起作用(只使用文件扩展名“。”而不是“*”,根据其他评论在这里)。 - JohnLBevan
显示剩余8条评论

19
在IIS6中也可以完成此操作/无需使用web.config,而是使用管理GUI为扩展名.添加MIME类型,如下所示:进入图像描述例如,要提供.well-known/acme-challenge令牌,请创建一个名为.well-known的虚拟目录,并从物理目录中获取其内容(在Windows中不能以前导点的名称命名)。然后,在该目录中为扩展名.添加text/plain MIME类型,即可手动获取为旧IIS服务的域获取新的letsencrypt证书。

3
在Windows中,你可以在目录名称的开头添加句点。只需创建一个名为.well-known.的目录即可(资源管理器将删除最后一个点,留下.well-known)。 - Peter
3
在IIS 7+中,“Mime类型”部分也可以实现这一点。右键单击,使用“text/plain”(用于acme-challenge)或“text/xml”(用于xml)的Mime类型添加扩展名.(只是一个点)。 - crthompson
谢谢!这正是我需要的用例。你真是个冠军! - user319862

13

手动更改配置可能出现错误。因此,Internet Information Server (IIS) 控制台提供了一种更简单、更可靠的方法来更新 MIME 类型。请按照以下步骤操作:

  1. 打开 IIS。

  2. 在左侧导航窗格中展开您网站的节点。

  3. 选择您的应用程序或虚拟目录。

  4. 在右侧窗格中的IIS部分下双击 MIME 类型 功能:

    输入图像描述

  5. 操作窗格中点击 添加.. 链接。设置 MIME 类型以支持所有没有扩展名的文件。然后点击 确定

    输入图像描述

这些步骤背后的原理是根据 PeterHahndorf 的帖子 建议,更改了您应用程序或虚拟目录(在您的网站下)的 web.config 文件。

注意:上述步骤中显示的屏幕截图是从安装有 IIS v10 的 Windows 10 机器中获取的。


8
引用RustyX的话:“对我来说,fileExtension=".*"没有起作用,但是fileExtension="."可以起作用。” - Ahmet Noyan Kızıltan
好的。鉴于@RustyX评论中的点赞数量,我相信这就是你所观察到的情况。我的帖子之一的目的也是让读者意识到如何通过IIS管理器UI实现此更改,而不是直接操作配置文件。 - RBT
这真的很不直觉!但是,它确实有效! - S.H.
在我看来,这是最安全的更改方式。在我们的情况下,IIS被用于更新代理,但对于Linux却无法正常工作。我添加了'.'和'.'的定义,但当我尝试下载没有扩展名的文件时,出现了“内部服务器错误”。结果发现Sophos更新站点已经将'.'定义为'Sophos/updates',因此我删除了我的定义。现在一切都好了:最终修复它的是添加'.'定义。 - Philip Kearns

0

对我来说,我只想提供一个文件,所以我添加了一个简单的重写规则,因为其他方法在某些情况下无法正常工作。

  <system.webServer>
      <rewrite>
          <rules>
              <rule name="apple-app-site-association" patternSyntax="ExactMatch">
                  <match url="apple-app-site-association" />
                  <action type="Rewrite" url="/apple-app-site-association.txt" />
              </rule>
          </rules>
      </rewrite>
  </system.webServer>

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