我正在开发Azure云托管的MVC Web App。 一切工作正常,因为我提出了重写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")" />
我试图推迟重写规则,但它似乎是“永久性的”,即使相关代码在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了!
答案 0 :(得分:1)
让我们开始: 我试图推迟重写规则,但它似乎是“永久的”,即使相关代码在web.config中被注释。
永久重定向存储在浏览器中,是的,您希望它们存储在浏览器中,就像访问x - &gt;从服务器重定向到 - &gt; 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以使图像正常工作(再次检查重写或重定向)
如果您可以访问图像,则意味着它是您的浏览器或提琴手上的缓存问题。 如果没有,那么你有一个不正确的托管应用程序,在同一个实例上的另一个应用程序下托管的图像,wwroot vs你的应用程序文件夹,如果你有这样的东西,再次检查@ Url.Content做什么,看看谁在为你提供服务。< / p>
答案 1 :(得分:1)
好的!我终于找到了问题。我所做的是将此规则放在我的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。我可以在规则中添加一个条件来否定localhost地址,但暂时不想修改此文件。