我在谷歌和StackOverflow周围搜索,试图找到一个解决方案,但他们似乎都与ASP有关。净等。

我通常在我的服务器上运行Linux,但对于这个客户端,我使用带有IIS 7.5(和Plesk 10)的Windows。这就是为什么我对IIS和web有点不熟悉的原因。配置文件。在.htaccess文件中,您可以使用重写条件来检测协议是否为HTTPS并相应地重定向。有没有一个简单的方法来实现这一点使用网络。配置文件,甚至使用'URL重写'模块,我已经安装?

我没有ASP的经验。NET因此,如果这涉及到解决方案,那么请包括如何实现的明确步骤。

我这样做的原因是。配置而不是PHP是我想强制HTTPS在网站内的所有资产。


当前回答

我正在使用下面的代码,它完美地为我工作,希望它会帮助你。

<configuration>
<system.webServer>
    <rewrite>
        <rules>
            <rule name="Force redirect to https" stopProcessing="true">
                <match url="(.*)" />
                <conditions>
                    <add input="{HTTPS}" pattern="^OFF$" />
                </conditions>
                <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

其他回答

出色的NWebsec库可以使用Web.config中的upgrade-insecure-requests标签将您的请求从HTTP升级到HTTPS:

<nwebsec>
  <httpHeaderSecurityModule>
    <securityHttpHeaders>
      <content-Security-Policy enabled="true">
        <upgrade-insecure-requests enabled="true"  />
      </content-Security-Policy>
    </securityHttpHeaders>
  </httpHeaderSecurityModule>
</nwebsec>

当您在AWS上使用带有应用程序负载均衡器的IIS 10时,必须按以下方式配置重定向。

        <rule name="Force HTTPS" enabled="true" stopProcessing="true">
            <match url="(.*)" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                <add input="{HTTP_X_Forwarded_Proto}" pattern="^https$" negate="true" />
                <add input="{HTTP_HOST}" pattern="^(www\.)?dname\.com$" />
            </conditions>
            <action type="Redirect" url="https://www.dname.com{REQUEST_URI}" />
        </rule>

如果你有子域重定向使用如下:

        <!--START REDIRECT TO HTTPS-->
        <rule name="Force HTTPS" enabled="true" stopProcessing="true">
            <match url="(.*)" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                <add input="{HTTP_X_Forwarded_Proto}" pattern="^https$" negate="true" />
                <add input="{HTTP_HOST}" pattern="subdomain\.domain\.com$" />
            </conditions>
            <action type="Redirect" url="https://subdomain.domain.com{REQUEST_URI}" />
        </rule> 
        <!--END REDIRECT TO HTTPS-->    

我正在使用下面的代码,它完美地为我工作,希望它会帮助你。

<configuration>
<system.webServer>
    <rewrite>
        <rules>
            <rule name="Force redirect to https" stopProcessing="true">
                <match url="(.*)" />
                <conditions>
                    <add input="{HTTPS}" pattern="^OFF$" />
                </conditions>
                <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

在.Net Core中,请遵循https://learn.microsoft.com/en-us/aspnet/core/security/enforcing-ssl上的说明

在startup.cs中添加以下内容:

// Requires using Microsoft.AspNetCore.Mvc;
public void ConfigureServices(IServiceCollection services)
{
    services.Configure<MvcOptions>(options =>
    {
        options.Filters.Add(new RequireHttpsAttribute());
    });`enter code here`

要将Http重定向到Https,请在startup.cs . xml文件中添加以下内容

// Requires using Microsoft.AspNetCore.Rewrite;
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();

    var options = new RewriteOptions()
       .AddRedirectToHttps();

    app.UseRewriter(options);

我不允许在我的环境中安装URL重写,所以,我找到了另一个路径。

把这个加到我的网里。config添加了错误重写,并适用于iis7.5:

<system.webServer>
    <httpErrors errorMode="Custom" defaultResponseMode="File" defaultPath="C:\WebSites\yoursite\" >    
    <remove statusCode="403" subStatusCode="4" />
    <error statusCode="403" subStatusCode="4" responseMode="File" path="redirectToHttps.html" />
</httpErrors>

然后,按照这里的建议:https://www.sslshopper.com/iis7-redirect-http-to-https.html

我将IIS网站配置为需要SSL,并创建了html文件,在403(禁止)错误时执行重定向(redirectToHttps.html):

<html>
<head><title>Redirecting...</title></head>
<script language="JavaScript">
function redirectHttpToHttps()
{
    var httpURL= window.location.hostname + window.location.pathname + window.location.search;
    var httpsURL= "https://" + httpURL;
    window.location = httpsURL;
}
redirectHttpToHttps();
</script>
<body>
</body>
</html>

我希望有人发现这是有用的,因为我无法找到所有的碎片在一个地方在其他地方。