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

Posted

技术标签:

【中文标题】IIS:如何提供没有扩展名的文件?【英文标题】:IIS: How to serve a file without extension? 【发布时间】:2013-11-25 21:11:46 【问题描述】:

我在Windows 8.1 上使用IIS 8。我有一个 XML 文件,我需要通过 (servername)/(path)

访问它

(path) 是别人预定义的,不包含扩展名。我尝试了删除.xml文件文件名的简单解决方案,但是IIS returns HTTP Error 404.3 - Not Found

在返回错误的“物理路径”中是正确的文件路径,当我复制粘贴到运行时会打开正确的文件。

如果可以,请告诉我。

【问题讨论】:

一种解决方案是提供(path)\index.html下的文件吗? 奇怪的是,高票的答案没有被接受。 【参考方案1】:

假设(路径)是您机器上的一个物理目录,在该目录中创建一个新的 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 Management Scripts and Tools,则可以使用 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 是该网站下的目录。

【讨论】:

对我来说 fileExtension=".*" 没用,但 fileExtension="." 有效。 这个答案帮助我设置了 ios 通用链接 apple-app-site-association 文件,以便由我的网站正确提供。非常感谢! @NikhilMathew 您使用什么 mime 类型来提供您的 apple-app-site-association 文件?以上对我来说可以查看文件,但我不确定苹果期待什么 mime 类型。如果您的文件已加密,我知道它是 application/pkcs7-mime,但据说您不再需要这样做了,所以我不确定要为我的非加密文件使用什么类型。 没关系,我看到使用 application/json 有效:) fileExtension="." 对我也有用。 h/t @RustyX【参考方案2】:

也可以在 IIS 6 中完成/不使用 web.config,而是使用管理 GUI 在此处为扩展 . 添加 MIME 类型:

例如,要提供.well-known/acme-challenge 令牌,请创建一个名为.well-known 的虚拟目录,并让它从物理目录中获取其内容(在Windows 中不能有带前导点的名称)。然后在此目录中为扩展名. 添加text/plain MIME 类型,您可以为当前由旧IIS 提供服务的域手动获取新的letsencrypt 证书。

【讨论】:

你可以拥有 .在 windows 目录的开头创建一个名为 .well-known. 的目录(资源管理器将删除最后一个点,您将留下 .well-known IIS 7+ 中的“Mime Types”部分也允许您执行此操作。右键单击,添加扩展名.(只是一个点),mime 类型为text/plain(用于 acme-challenge)或text/xml(用于 xml)。 谢谢!这是我的确切用例和需求。你是冠军!【参考方案3】:

手动更改配置有时可能会有风险。 IIS 提供了一种通过 IIS 管理器更新 MIME 类型的方法,如下所示。这些快照适用于安装在 Windows 10 机器上的 IIS v10:

    转到您网站虚拟目录的 MIME 类型功能:

    设置 mime 类型以支持所有没有扩展名的文件:

这些步骤有效地将更改保存到您的网站或虚拟目录(在您的网站下)的web.config,正如@PeterHahndorf 在他的post 中所建议的那样。

【讨论】:

引用 RustyX:“对我来说 fileExtension=".*" 不起作用,但 fileExtension="." 起作用了。” 好的。鉴于对@RustyX 评论的赞成票数量,我敢肯定这就是您所观察到的情况。我的帖子的目的之一也是让读者了解如何通过 IIS 管理器 UI 实现此更改,而不是直接使用配置文件。

以上是关于IIS:如何提供没有扩展名的文件?的主要内容,如果未能解决你的问题,请参考以下文章

IIS Web.config - 确保检测没有文件扩展名的文件

IIS 7忽略没有文件扩展名的MapPageRoute

如何允许 IIS express 访问任何文件扩展名

已经成安装IIS,但IIS里面没有WEB 扩展服务,

配置IIS服务器提供APP文件下载

iis404 没有设置mime的后缀