重写 HTTPS 规则后图像不显示
Images not displayed after rewrite rule for HTTPS
我正在开发托管在 Azure 云中的 MVC Web 应用程序。
一切正常,因为我制定了重写 URL 的规则以强制使用 HTTPS :
<rewrite>
<rules>
<clear />
<rule name="Redirect to https" stopProcessing="true">
<match url="(.*)" ignoreCase="false" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" appendQueryString="true" />
</rule>
</rules>
</rewrite>
我所有的图像现在都没有在生产中显示。
这是我用来显示图像的剃刀:
<img src="@Url.Content("~/Content/Images/Picture.png")" />
我试图推迟重写规则,但它似乎是"permanent",即使相关代码在web.config.
中被注释
我已经尝试将此添加到我的 web.config :
<configuration>
<location path="~/Content/Images">
<system.web>
<authorization>
<allow users="*"/> ---or even "?"
</authorization>
</system.web>
但没有任何变化。
有什么想法吗?
谢谢。
-- 编辑
为了最完整,这里是我的 _layout 页面的头节点:
@*@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")*@
@Styles.Render("~/Content/Site.css")
@Styles.Render("~/Content/Slick/slick.css")
@Styles.Render("~/Content/Slick/slick-theme.css")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/Scripts/Slick/slick.min.js")
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts", required:=False)
也许我设置的顺序有误?这将是令人惊讶的,因为它以前有效。
顺便说一句,在调试模式下,我也没有更多 CSS/JS 了!
让我们开始:
我试图推迟重写规则但它似乎是"permanent",即使相关代码在web.config.
中被注释
永久重定向存储在浏览器中,是的,当您访问 x -> 从服务器重定向到 -> y 浏览器时,您希望它们存储在浏览器中,帮助您加快速度,为您提供准确的页面。清除您的导航历史,浏览器将再次访问原始资源。
从 http 到 https 的图像有问题,为了让它正常工作,您需要确保使用 http 提供正确的图像。
第一步:
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect to https">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="https://{SERVER_NAME}/{R:1}" redirectType="Permanent" appendQueryString="true" />
</rule>
</rules>
</rewrite>
排除要重定向到 https 的文件,您可以检查是否确实可以在没有 https 的情况下访问这些文件。如果您再次收到 404,则您对 azure 文件的 http 访问存在问题( 需要在执行重定向之前可访问)。并确保在此规则之后您没有对文件进行其他重定向或重写。
如果这不是问题,请确保您在 url 中手动将图像从 http 更改为 https 是否正常(再次检查重写或重定向)
如果您可以访问图像,则表示您的浏览器或 fiddler 存在缓存问题。
如果不是,那么您的托管应用程序不正确,图像托管在同一实例的另一个应用程序下,wwroot 与您的应用程序文件夹如果您有类似的东西,请再次检查@Url.Content 做了什么,看看谁在为您服务.
好的!我终于找到了问题所在。我所做的是将此规则放入我的 web.config :
<rewrite>
<rules>
<rule name="Redirect to https">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="https://{SERVER_NAME}/{R:1}" redirectType="Permanent" appendQueryString="true" />
</rule>
</rules>
我认为我的不正确。感谢@SilentTremor。
然后我从头开始重写了这些调用:
来自
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@Scripts.Render("~/Scripts/jquery-2.2.0.min.js")
@Styles.Render("~/Content/Site.css")
@Styles.Render("~/Content/Slick/slick.css")
@Styles.Render("~/Content/Slick/slick-theme.css")
@Scripts.Render("~/Scripts/Slick/slick.min.js")
到
@Styles.Render("~/Content/css")
@Styles.Render("~/Content/Slick/slick.css")
@Styles.Render("~/Content/Slick/slick-theme.css")
@Scripts.Render("~/Scripts/jquery-2.2.0.min.js")
@Scripts.Render("~/Scripts/Slick/slick.min.js")
<link rel="Stylesheet" href="@Url.Content("~/Content/Site.css")" />
现在当我必须在本地调试时,我在 web.config 中注释规则,因为 localhost 不接受 HTTPS。我可以在规则中添加一个条件来否定本地主机地址,但暂时不想修改此文件。
我正在开发托管在 Azure 云中的 MVC Web 应用程序。 一切正常,因为我制定了重写 URL 的规则以强制使用 HTTPS :
<rewrite>
<rules>
<clear />
<rule name="Redirect to https" stopProcessing="true">
<match url="(.*)" ignoreCase="false" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" appendQueryString="true" />
</rule>
</rules>
</rewrite>
我所有的图像现在都没有在生产中显示。 这是我用来显示图像的剃刀:
<img src="@Url.Content("~/Content/Images/Picture.png")" />
我试图推迟重写规则,但它似乎是"permanent",即使相关代码在web.config.
中被注释我已经尝试将此添加到我的 web.config :
<configuration>
<location path="~/Content/Images">
<system.web>
<authorization>
<allow users="*"/> ---or even "?"
</authorization>
</system.web>
但没有任何变化。
有什么想法吗?
谢谢。
-- 编辑 为了最完整,这里是我的 _layout 页面的头节点:
@*@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")*@
@Styles.Render("~/Content/Site.css")
@Styles.Render("~/Content/Slick/slick.css")
@Styles.Render("~/Content/Slick/slick-theme.css")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/Scripts/Slick/slick.min.js")
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts", required:=False)
也许我设置的顺序有误?这将是令人惊讶的,因为它以前有效。
顺便说一句,在调试模式下,我也没有更多 CSS/JS 了!
让我们开始: 我试图推迟重写规则但它似乎是"permanent",即使相关代码在web.config.
中被注释永久重定向存储在浏览器中,是的,当您访问 x -> 从服务器重定向到 -> y 浏览器时,您希望它们存储在浏览器中,帮助您加快速度,为您提供准确的页面。清除您的导航历史,浏览器将再次访问原始资源。
从 http 到 https 的图像有问题,为了让它正常工作,您需要确保使用 http 提供正确的图像。
第一步:
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect to https">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="https://{SERVER_NAME}/{R:1}" redirectType="Permanent" appendQueryString="true" />
</rule>
</rules>
</rewrite>
排除要重定向到 https 的文件,您可以检查是否确实可以在没有 https 的情况下访问这些文件。如果您再次收到 404,则您对 azure 文件的 http 访问存在问题( 需要在执行重定向之前可访问)。并确保在此规则之后您没有对文件进行其他重定向或重写。
如果这不是问题,请确保您在 url 中手动将图像从 http 更改为 https 是否正常(再次检查重写或重定向)
如果您可以访问图像,则表示您的浏览器或 fiddler 存在缓存问题。 如果不是,那么您的托管应用程序不正确,图像托管在同一实例的另一个应用程序下,wwroot 与您的应用程序文件夹如果您有类似的东西,请再次检查@Url.Content 做了什么,看看谁在为您服务.
好的!我终于找到了问题所在。我所做的是将此规则放入我的 web.config :
<rewrite>
<rules>
<rule name="Redirect to https">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="https://{SERVER_NAME}/{R:1}" redirectType="Permanent" appendQueryString="true" />
</rule>
</rules>
我认为我的不正确。感谢@SilentTremor。
然后我从头开始重写了这些调用:
来自
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@Scripts.Render("~/Scripts/jquery-2.2.0.min.js")
@Styles.Render("~/Content/Site.css")
@Styles.Render("~/Content/Slick/slick.css")
@Styles.Render("~/Content/Slick/slick-theme.css")
@Scripts.Render("~/Scripts/Slick/slick.min.js")
到
@Styles.Render("~/Content/css")
@Styles.Render("~/Content/Slick/slick.css")
@Styles.Render("~/Content/Slick/slick-theme.css")
@Scripts.Render("~/Scripts/jquery-2.2.0.min.js")
@Scripts.Render("~/Scripts/Slick/slick.min.js")
<link rel="Stylesheet" href="@Url.Content("~/Content/Site.css")" />
现在当我必须在本地调试时,我在 web.config 中注释规则,因为 localhost 不接受 HTTPS。我可以在规则中添加一个条件来否定本地主机地址,但暂时不想修改此文件。