HTTPS重写规则后未显示的图像

时间:2016-03-17 19:07:12

标签: asp.net-mvc azure url-rewriting web-config

我正在开发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了!

2 个答案:

答案 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地址,但暂时不想修改此文件。