https - 如何获取URL重写HTTP到HTTP和非WWW到WWW工作

标签 https url-rewriting seo iis-8 isapi-rewrite

我一直在网上寻找解决方案,但我只能得到1和2工作。
http://www.example.comhttps://www.example.com
www.example.comhttps://www.example.com
http://example.comhttps://www.example.com
https://example.comhttps://www.example.com
https://example.comhttps://www.example.com
example.com/page.aspxhttps://www.example.com/page.aspx
要求:
所有URL都是https
所有没有www的url都显示www
所有其他重定向到工作、查询字符串和参数等。
所以主要的问题是,如果没有指定协议(httphttps),那么如果我输入example.com/blah,那么它将转换为www.example.com/blah,但是将协议(httphttps)放在前面,它会断开链接。
由于我目前没有将非www url移动到www的规则,所以我不确定要做什么,如果必须这样做,我如何才能让它与http到https一起工作。
我试着把http到https的规则和非www到www的规则放在一起,但是没有用(你会看到的第一个例子-下面的例子是我现在使用的)。
我试过使用{HTTP_HOST}而不是在规则的重定向部分写出我站点的url。
我试过将规则分成两个部分,一个用于http到https,另一个用于no www到www。
不过,似乎什么都没用。
目前,我只是在使用hosts文件并练习,更改win 2012上网站的web.config文件中的规则。
我也有其他规则,例如www.example.com/plugins转到.aspx下面的页面(重写),但是如果url中没有www,这些规则也不起作用。
因此,似乎将非www url重定向到www才是问题所在,我不知道如何将其与http到https规则结合起来。
我试着把这两个规则结合起来,这两个规则涵盖了https/www,并且除了4/5(非www到www)之外,都是这个规则。

<rule name="Redirect to HTTPS" stopProcessing="true">
                <match url="(.*)" />
                <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
                <add input="{HTTPS}" pattern="^OFF$" />
                <add input="{HTTP_HOST}" pattern="^[^www]" />
                </conditions>
                <action type="Redirect" url="https://www.example.com/{R:1}" appendQueryString="true" redirectType="Permanent" />
             </rule>

logicalGrouping="MatchAny"切换到"MatchAll"似乎没有什么区别。
只要有人没有将url键入http://example.com/plugins,它就可以正常工作,并被重定向到https://www.example.com/plugins
我不知道现在有多少人在输入链接时实际输入了协议(//也能工作),但显然是旧的搜索引擎和站点嵌入的链接,我需要处理重复的内容。
有没有人能想到这不起作用的原因,或者我应该尝试什么?
我为www和不www的端口80/443都设置了绑定。
我从来没有在这样的问题的答案,人们谈论很多关于i is设置,如绑定和端口,但我认为他们应该因为web.config绑定到url重定向应用程序和绑定显然是您的地址所必需的。
我只是觉得很奇怪,我之前提出的示例规则和这个只提到http到https的规则一样有效。
这就是我现在使用的。也许iis用www做了些什么?
<rule name="Redirect to HTTPS" stopProcessing="true">
                <match url="(.*)" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                <add input="{HTTPS}" pattern="^OFF$" />
                </conditions>
                <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther" />
             </rule>

我甚至更改了绑定的顺序,使非www绑定走在www绑定之前,以为这可能与它有关。
我控制我的dns和a记录
DNSEntry - WWW
Type - A
Destination - MY IP

所以,我有点困惑,到底是什么迫使非www网址去www网址。因为我目前在web.config中使用的命令只提到https。
我在想,也许在i is(我不是i is 8专家)中有什么东西设置了它,或者其中一个值的设置应该是一个没有www的域。
任何帮助都将不胜感激。我怀疑有很多网址指向我的网站没有在它的www无论如何,但这将是很好的知道,为搜索引擎优化,我可以强迫他们都到一个地方,这样我就不会被抓到重复的内容。

最佳答案

请尝试以下代码:

    <rule name="Redirect to HTTPS" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
                <add input="{HTTPS}" pattern="^OFF$" />
            </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
    </rule>

How to force HTTPS using a web.config file
IIS 7.5 URL Redirect for specific patterns
Override an IIS rewrite rule for child site?

关于https - 如何获取URL重写HTTP到HTTP和非WWW到WWW工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38557324/

相关文章:

Asp.Net 3.5 路由到 Web 服务?

WordPress/WooCommerce : Remove "product-category" slug - SEO improvement

php - 在 php 中搜索 url

python-2.7 - 如何在 python 2.7 中使用 ssl

Python Mechanize 模块加密

php - 将国家代码添加到 Wordpress 中所有 URL 的开头

ASP.Net:尝试处理 http://localhost:5957/http://yahoo.com 时出现 HTTP 400 错误请求错误

html - 从 SEO 的角度来看,将网站所有内容安排在 <ul><li> 中是否更好?

django - 如何在 Django 中将任何 API 请求从 http 重定向到 https?

ruby-on-rails - Ruby on Rails - 如何通过 HTTPS 和基本身份验证保存远程文件