当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 设置和使用 IIS URL 重写模块(分步)

作者:精品下载站 日期:2024-12-14 12:33:35 浏览:13 分类:玩电脑

设置和使用 IIS URL 重写模块(分步)


因此,您要开始一个新项目,需要建立一个网站,有人让您在旧的企业 Windows Server 机器上使用 IIS(Internet 信息服务)。真是太累了!您如何完成配置 IIS URL 重写规则等日常任务?不要害怕!今天,您将了解如何做到这一点。

在本教程中,您将使用一个简单的 VuePress 网站项目作为示例,并弄清楚该项目需要什么样的重写规则。尽管付出了很多努力,但这个过程并不算太冗长!

继续阅读,永远不要让您的网站导致链接失效!

先决条件

本教程将是一个非常实用的演示!如果您想继续操作,请确保您具备以下条件:

  • 任何支持的 Windows 操作系统(Windows 10 或 11,或 Windows Server 2019、20H2 或 2022)
  • Internet 信息服务 7 或更高版本
  • 您已在 IIS 上托管的网站

安装 URL 重写模块

IIS URL Rewrite 模块是 IIS 上必须了解的模块之一。该模块允许您快速构建规则来管理站点上的传入和传出链接。

通过安装 URL 重写模块开始本教程。您的系统上可能有也可能没有它,因此您首先必须检查该模块是否已安装在您的系统上。

1. 打开 Internet 信息服务 (IIS) 管理器,然后在连接面板中的站点下选择您的任意网站。

如果您在列表中没有看到该模块,则需要先安装它。但如果该模块存在,如下面的屏幕截图所示),您可以跳转到“重定向 URL 以使用 HTTPS 保护网站”部分!

[玩转系统] 设置和使用 IIS URL 重写模块(分步)

2. 下载 IIS 7(及更高版本)的 URL 重写模块,然后按照提示安装该模块。

3. 最后,重新启动 IIS 管理器,现在该模块应该可用了!

重定向 URL 以使用 HTTPS 来保护网站

将您的网站放在互联网上会带来很多风险。因此,第一步是保护您的网站,IIS URL 重写模块可以提供帮助。您不想通过纯 HTTP 为您的网站提供服务,而是需要 HTTPS,您可以通过重定向来处理它。

1. 首先,打开 IIS 管理器,然后单击左侧面板上的默认网站。双击URL Rewrite模块,如下图所示,添加重写规则。

[玩转系统] 设置和使用 IIS URL 重写模块(分步)

2. 接下来,单击右侧面板上的添加规则选项,将出现一个弹出窗口,您可以在其中选择规则模板。规则模板允许您根据需要创建一个或多个重写规则。

[玩转系统] 设置和使用 IIS URL 重写模块(分步)

3. 选择空白规则,然后单击确定,因为没有模板与您的用例匹配。相反,您将手动配置规则。

[玩转系统] 设置和使用 IIS URL 重写模块(分步)

4. 现在您将创建一个匹配所有 URL 的正则表达式模式匹配规则。您将匹配任何传入的 URL,但仅修改那些不使用 HTTPS 的 URL。

在匹配 URL 部分:

  • 请求的 URL 设置为匹配模式,使您能够使用正则表达式来决定要匹配哪些传入请求。
  • 使用设置为正则表达式,以设置匹配每个传入请求的规则。
  • 输入 (.*) 作为模式 - 此正则表达式匹配所有 URL,以针对此规则的每个 URL。
  • 默认情况下会选择忽略大小写,但由于您的模式实际上是“匹配所有”,因此此选择并不重要。

[玩转系统] 设置和使用 IIS URL 重写模块(分步)

5. 现在向下滚动一点,并添加条件以排除使用 https 的传入请求,如下所示。

条件部分下设置如下字段以检查条件,该条件将决定是否对传入请求应用规则:

  • 条件输入设置为 {HTTPS},这将仅匹配使用 HTTPS 协议(而不是 HTTP)的请求。
  • 将下拉列表保留为与模式匹配。
  • 将模式设置为 ^OFF$,这会导致规则应用于不使用 HTTPS 作为协议的传入请求。

[玩转系统] 设置和使用 IIS URL 重写模块(分步)

6. 添加条件后,设置规则将采取的操作:

  • 操作类型设置为重定向,这会将用户重定向到浏览器中的新地址(而不是重写 URL 的外观)。
  • 将重定向 URL 设置为 https://{HTTP_HOST}/{REQUEST_URI},这会将用户重定向到同一域(或“主机”、“使用服务器变量 HTTP_HOST),但使用 HTTPS 作为协议。
  • 重定向类型设置为永久 (301),因为您的页面已永久更改其位置。
  • 单击操作面板下的应用按钮以应用重定向规则。

[玩转系统] 设置和使用 IIS URL 重写模块(分步)

7. 最后,打开您最喜欢的网络浏览器并将您的网站导航至 (http://localhost)。您将在下面看到您的网站重定向到 https://localhost 以进行安全访问。

[玩转系统] 设置和使用 IIS URL 重写模块(分步)

如果您的浏览器似乎忽略了重写规则,请仔细检查您的模式 - 大多数时候,问题是拼写错误或额外的空格。另外,通过选择规则并单击“启用规则”选项来验证您的规则是否已启用,如下所示。

[玩转系统] 设置和使用 IIS URL 重写模块(分步)

使用web.config文件修改URL重写规则

也许您更喜欢修改配置文件中的重写规则。如果是这样,您可以通过直接编辑网站的 web.config 文件来修改规则。但首先,您需要找到您的 web.config 文件,最快的方法是通过 IIS 管理器。

1. 在 IIS 管理器上,单击连接面板(左侧面板)下的网站,然后单击操作面板(右侧面板)中的浏览控制板)。 web.config 文件的位置将在文件资源管理器中打开,如下所示。

[玩转系统] 设置和使用 IIS URL 重写模块(分步)

2. 在您喜欢的文本编辑器中打开web.config 文件。如果您没有进行任何更改,它将如下所示

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
</configuration>

3.根据自己的喜好修改重写规则。修改应该在 内部,如果它还不存在,您需要创建它。

修改规则的最终结果如下所示。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!-- This section tells IIS we're configuring a module for the web server functionality or one of its modules -->
	<system.webServer>
		<!-- This section defines configuration for the URL Rewrite module -->
		<rewrite>
	      <rules>
						<!-- This section adds a new rule for our HTTPS REdirect -->
	          <rule name="HTTPS Redirect" stopProcessing="true">
								<!-- Match all URLS... -->
	              <match url="(.*)" />
	              <conditions>
										<!-- ... but only if they are using HTTP instead of HTTPS! -->
	                  <add input="{HTTPS}" pattern="^OFF$" />
	              </conditions>
								<!-- Redirect to a HTTPS version of the page -->
	              <action type="Redirect" url="https://{HTTP_HOST}/{REQUEST_URI}" appendQueryString="false" />
	          </rule>
	      </rules>
	  </rewrite>
	</system.webServer>
</configuration>

4. 最后,在浏览器上导航至 http://localhost 以确保规则有效,并验证 URL 更改为 https://localhost

如果您的网站开始抛出 403.18 错误(如下面的屏幕截图所示),则很可能导致该错误的是影响子应用程序或“虚拟目录”的规则。 “您需要阻止规则被继承来修复错误,但这个主题超出了本教程的范围。

[玩转系统] 设置和使用 IIS URL 重写模块(分步)

通过 PowerShell 脚本修改 URL 重写规则

如果您更喜欢编写脚本,PowerShell 脚本可以让您完成创建重写规则。这些 cmdlet 非常冗长,您需要在脚本中运行相当多的命令,而不是逐个运行它们。

1. 在您喜欢的文本编辑器或脚本编辑器中创建脚本文件,使用以下代码填充该文件并根据需要修改值。

此时,您应该熟悉下面代码中的值,因为它们与您在上一节中使用的值相同。

# Firstly, the script needs to import the module WebAdministration to get access to the cmdlets required to add and modify the “WebConfigurationProperties” (which will just get injected into the web.config)
Import-Module webAdministration 
# Then the script defines your IIS website - in this case, the default site.
$site = "iis:\sites\Default Web Site"

# Then the sript will create the property for our rule
Add-WebConfigurationProperty -pspath $site -filter "system.webserver/rewrite/rules" -name "." -value @{name='HTTPS Redirect'; patternSyntax='ECMAScript'; stopProcessing='True'}
# The script ill set it to match any incoming request
Set-WebConfigurationProperty -pspath $site -filter "system.webserver/rewrite/rules/rule[@name='HTTPS Redirect']/match" -name url -value "(.*)"
# And finally, add the familiar condition to only match HTTP requests (and not HTTPS).
Add-WebConfigurationProperty -pspath $site -filter "system.webserver/rewrite/rules/rule[@name='HTTPS Redirect']/conditions" -name "." -value @{input="{HTTPS}"; pattern='^OFF$'}
# The last 3 commandlets set the values for type, URL and appendQueryString-parameter for the action itself, “Rewrite”, “https://{HTTP_HOST}/{REQUEST_URI}” and “false”, respectively.
Set-WebConfigurationProperty -pspath $site -filter "system.webServer/rewrite/rules/rule[@name='HTTPS Redirect']/action" -name "type" -value "Redirect"
Set-WebConfigurationProperty -pspath $site -filter "system.webServer/rewrite/rules/rule[@name='HTTPS Redirect']/action" -name "url" -value "https://{HTTP_HOST}/{REQUEST_URI}"
Set-WebConfigurationProperty -pspath $site -filter "system.webServer/rewrite/rules/rule[@name='HTTPS Redirect']/action" -name "appendQueryString" -value "false"

2. 运行脚本以应用对重写规则的 web.config 文件的修改。

3. 最后,导航到 http://localhost 以测试规则是否有效。

也许您直接修改 web.config 文件后突然出现“500 - Internal Server Error”。如果是这样,请验证您的 web.config 文件的语法 - 这很容易搞砸。或者尝试重新安装 IIS 的 URL 重写模块。

实施 URL 重写规则来修复损坏的链接

您已成功使用 HTTPS 保护您的网站,但如果您的网站导致链接损坏怎么办?想象一下,您刚刚收到同事发来的一封电子邮件,抱怨通往您网站的链接已损坏,因此您进行了调查。

你瞧,从日志中,你发现很多人都遇到了 404 错误。该错误带有指向不再存在的旧文章的链接。深入挖掘,您会发现大量网站链接到您的网站,其中引用网站的链接已损坏。

联系所有网站开发人员来更新链接是一个巨大的痛苦!幸运的是,URL 重写模块可以通过将损坏的 URL 重定向到正确的 URL 来挽救局面。

1. 按照“使用 IIS 管理器修改 URL 重写规则”中的操作创建新的空白规则(步骤一到三)

2. 接下来,使用以下内容配置新的重写规则:

  • 使用精确匹配将请求的 URL 设置为匹配模式
  • 输入损坏的 URL 作为模式。
  • 选择重定向作为操作类型。

[玩转系统] 设置和使用 IIS URL 重写模块(分步)

3. 在操作部分下,设置以下内容:

  • 插入新网址作为重定向网址
  • 默认情况下,您可以让附加查询字符串选项保持选中状态,以保留 URL 在重定向之前可能具有的任何参数。
  • 重定向类型设置为永久 (301)。
  • 单击应用以完成新规则。

请注意损坏链接的准确 URL。在下面的示例中,Pattern 字段中包含端口 80。即使可见 URL 中省略了端口,它也会出现在 IIS 考虑用于规则的 URL 中。

[玩转系统] 设置和使用 IIS URL 重写模块(分步)

4. 最后,导航到损坏的 URL 并查看它是否重定向到正确的 URL。

结论

在本教程中,您学习了如何安装 IIS URL 重写模块、创建第一个 URL 重写规则以及解决可能出现的一些最典型的问题。此时,您现在可以使用 URL 重写模块保持网站正常运行并可访问。

有了这些知识,您就可以承担更复杂的任务 - 例如更改站点的目录结构或配置 React Router 的规则。 URL 重写模块允许您将用户重定向到新位置,并使用重写规则从多个地址共享您的内容 - 但这是另一个教程的主题!

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯