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:如何提供没有扩展名的文件?的主要内容,如果未能解决你的问题,请参考以下文章