IIS显示404但文件存在

6

在将我的应用程序部署到VPS后,我遇到了问题。

我在VPS上安装了IIS,删除了默认网站,并添加了另一个网站。一切看起来都很正常,网站启动了,但是我无法访问像ContentScriptsTemplates等文件夹中的任何文件。这意味着我的网站上没有任何图片和样式。

我尝试为IIS_IUSRS授予权限,但文件仍然无法正确显示。网站与系统位于同一分区,我认为这就是问题所在,但我无法移动它。我只有一个分区 :-( 有解决方法吗?


我有同样的问题。我已经重新启动了我的电脑。 - Arsalan Qaiser
检查事件日志,看是否有任何权限问题被记录。 - PatrickSteele
7个回答

5

以上方法对我都没有起作用。我还记得很久以前的一种方法可以解决这个问题,那就是缺少MIME类型映射会使IIS感到困惑。如果你能将不同类型的文件放在不同的文件夹中,那么这个问题就容易诊断。

简单的解决方法是在IIS的"MIME类型"部分进行设置,可以在服务器、网站或虚拟文件夹上进行设置。只需添加"*.foo"和"application/octet-stream"作为MIME类型即可,这意味着"只需发送字节即可!"


这是对我有效的解决方案。我将我的内容类型设置为application/octet-stream,然后IIS就会提供文件。 - sevenr
1
一个快速但非常不安全的解决方法,以确保IIS将到目前为止未配置的MIME类型作为“application/octet-stream”提供,是在配置中添加默认MIME类型,详见https://dev59.com/fVfUa4cB1Zd3GeqPGEGU#8717569。请记住,这将使IIS将每个未识别的类型都作为八位字节流提供,从而导致可能的安全妥协。 - sevenr

1
您需要在包含静态文件的每个文件夹中添加一个web.config文件,以提供静态文件服务,并包含以下内容:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <staticContent>
            <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" />
        </staticContent>
        <handlers accessPolicy="Script,Read">
            <!-- For any request to a file exists on disk, return it via native http module. AccessPolicy="Script" above is to allow for a managed 404 page. -->
            <add name="StaticFile" path="*" verb="*" modules="StaticFileModule" preCondition="integratedMode" resourceType="File" requireAccess="Read" />
        </handlers>
    </system.webServer>
</configuration>

很遗憾,仍然是一样的 :-( - Michal
你把它添加到了所有静态内容文件夹里吗? 之后你需要重置IIS。 - Tha'er AlAjlouni ثائر العجلوني
是的,所有静态内容文件夹。 - Michal
在安装IIS时,您是否在IIS设置中启用了“常见HTTP功能”下的“静态内容”? - Tha'er AlAjlouni ثائر العجلوني
似乎 validateIntegratedModeConfiguration 正在隐藏问题,请参考 validateIntegratedModeConfiguration 文档:https://www.iis.net/configreference/system.webserver/validation
当 validateIntegratedModeConfiguration 为 false 时,IIS 将不再提供不支持配置的警告,请确保您的应用程序在集成模式下正常工作,然后再进行此设置。
- Tha'er AlAjlouni ثائر العجلوني

0
请检查IIS中的用户。网站 -> 基本设置 -> 连接为...(如果我没记错的话)。
默认情况下,IIS中的用户是IUSR。您必须更改为IIS_IUSRS。然后您的权限将起作用。 这篇文章可能会对您有所帮助

0

我也遇到了这个问题,结果发现是文件路径的问题。

我试图以"C:\folder\file"的方式访问路径

当我尝试以"\file"的方式访问时,它起作用了,所以它将会像"(你的服务器)\file"这样

而不是"(你的服务器)C:\folder\file"


0

可能不是经常出现的问题,但我意外地使用默认页面的路径创建了一个虚拟目录,这搞乱了一切。我不得不打开applicationhost.config文件并删除虚拟目录(也许还有其他方法可以删除它,但在我打开文件之前我没有想到)。既然已经打开了文件,我就继续保存了更改。


0

我也添加了这段代码来使应用程序运行。如果没有它,应用程序无法工作,但文件可以正确显示。 :-(

<system.webServer>
   <validation validateIntegratedModeConfiguration="false"/>
    <handlers>
   <remove name="BlockViewHandler"/>
     <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler"/>
    </handlers>
    </system.webServer>

0
在我的情况下,我有一个扩展名为cache的文件——这是IIS中未知的mime类型。
通过更新站点web.config以添加文件扩展名cache的mimeMap,我的404文件未找到问题得到了解决,具体操作如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="true" />
        <security>
            <requestFiltering>
                <fileExtensions>
                    <remove fileExtension=".config" />
                    <add fileExtension=".config" allowed="true" />
                    <add fileExtension=".dll" allowed="true" />
                    <add fileExtension=".exe" allowed="true" />
                </fileExtensions>
            </requestFiltering>
        </security>
        <handlers accessPolicy="Read, Script" />
        <staticContent>
            <mimeMap fileExtension=".cache" mimeType="text/plain" />
        </staticContent>
    </system.webServer>
</configuration>

了解更多关于添加静态内容 MIME 映射解决 404 错误的信息。


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