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

问题描述 投票:0回答:5

我在

IIS 8
上使用
Windows 8.1
。我有一个
XML
文件,我需要通过 (服务器名称)/(路径)

访问它

(path) 由其他人预定义,不包含扩展名。我尝试了删除 .xml 文件的文件名的简单解决方案,但是

IIS returns HTTP Error 404.3 - Not Found

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

如果可能,请告诉我。

iis iis-8 iis-10
5个回答
148
投票

假设 (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 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
是该网站下的目录。


19
投票

也可以在 IIS 6 中完成/不使用

web.config
,而是使用管理 GUI 为扩展
.
添加 MIME 类型:

enter image description here

例如,要提供

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


14
投票

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

  1. 打开IIS

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

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

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

    enter image description here

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

    enter image description here

在幕后,这些步骤会按照 PeterHahndorf 的帖子中的建议对应用程序或虚拟目录(在您的网站下)的 web.config 文件进行更改。

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


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>

0
投票

以下对我来说适用于 IIS 10 和 Windows 11。

<rewrite>
<rules>
    <rule name="Hide .html ext">
        <match ignoreCase="true" url="^(.*)"/>
        <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
            <add input="{REQUEST_FILENAME}.html" matchType="IsFile"/>
        </conditions>
        <action type="Rewrite" url="{R:0}.html"/>
    </rule>
    <rule name="Redirecting .html ext" stopProcessing="true">
        <match url="^(.*).html"/>
        <conditions logicalGrouping="MatchAny">
            <add input="{URL}" pattern="(.*).html"/>
        </conditions>
        <action type="Redirect" url="{R:1}"/>
    </rule>
</rules>
© www.soinside.com 2019 - 2024. All rights reserved.