所以我有一个基于网络的应用程序,我负责在我们的客户处安装。这需要在 IIS 中进行大量手动配置,而我几乎可以通过 Powershell 完成所有这些工作。但我正在努力解决一件关键的事情,那就是我需要应用的 URL 重写设置。我想到的第一个是添加一条规则,将默认网站转发到特定网站。我用以下方法做到了:
$filterRoot = "system.webServer/rewrite/rules/rule[@name='RootRedirect$_']"
Clear-WebConfiguration -pspath $site -filter $filterRoot
Add-WebConfigurationProperty -pspath $site -filter "system.webServer/rewrite/rules" -name "." -value @{name='RootRedirect' + $_ ;patternSyntax='Regular Expressions';stopProcessing='True'}
Set-WebConfigurationProperty -pspath $site -filter "$filterRoot/match" -name "url" -value "(^$)"
Set-WebConfigurationProperty -pspath $site -filter "$filterRoot/conditions" -name "logicalGrouping" -value "MatchAny"
Set-WebConfigurationProperty -pspath $site -filter "$filterRoot/action" -name "type" -value "Redirect"
Set-WebConfigurationProperty -pspath $site -filter "$filterRoot/action" -name "url" -value "/redirectedlink"
我想弄清楚的第二个问题是如何将任何传入连接重定向到 https。我知道必须输入的设置,所以我最初的想法是手动创建它,然后使用 Get-WebConfigurationProperty 查看这些设置在 PowerShell 中的样子,这样我就知道如何重新创建它们。但我似乎不知道如何获得它们。我当前已配置名称为 HTTPSRedirectTest 的规则,但我不知道如何在 PowerShell 中查看该规则。我找到了有关 Get-WebConfigurationProperty 的各种信息,但找不到与 URL 重写设置相关的任何内容。有人对此有什么建议吗?
我发现了这个,它对我有用!
https://dbaland.wordpress.com/2019/02/13/create-a-http-to-https-url-redirect-in-iis-with-powershell/
编辑:最后我想出了这个,我能够弄清楚如何查看设置,但无法弄清楚我到底在看什么。我最终使用上面的链接来想出这个:
#Declare variable for path to default website
$site = "iis:\sites\Default Web Site"
#Create HTTPS Redirect
$FilterHTTPSredirect = "system.webServer/rewrite/rules/rule[@name='HTTPSredirect$_']"
Clear-WebConfiguration -pspath $site -filter $FilterHTTPSredirect
Add-WebConfigurationProperty -PSPath $site -filter "system.webServer/rewrite/rules" -name '.' -value @{name='HTTPSredirect' + $_ ; patterSyntax='Regular Expressions'; stopProcessing='True'}
Set-WebConfigurationProperty -PSPath $site -filter "$FilterHTTPSredirect/match" -name 'url' -value "(.*)"
Set-WebConfigurationProperty -PSPath $site -filter "$FilterHTTPSredirect/conditions" -name '.' -value @{input='{HTTPS}'; matchType='0'; pattern='^OFF$'; ignoreCase='True'; negate='False'}
Set-WebConfigurationProperty -PSPath $site -filter "$FilterHTTPSredirect/action" -name 'type' -value 'Redirect'
Set-WebConfigurationProperty -PSPath $site -filter "$FilterHTTPSredirect/action" -name 'url' -value 'https://{HTTP_HOST}{REQUEST_URI}'
#Disable HTTPS Redirect Rule
set-webconfigurationproperty '/system.webserver/rewrite/rules/rule[@name="HTTPSredirect"]' -Name enabled -Value false -PSPath "IIS:\sites\Default Web Site"
它添加了 https 重定向规则,但也禁用了它,因为并非每个站点都想使用它,并且如果他们确实希望启用它,则需要在其他地方进行其他配置。
以下是查看所有本地网站每条规则的操作的示例:
Import-Module WebAdministration
$sites = Get-ItemProperty "IIS:\Sites\*"
foreach ($site in $sites) {
$siteName = $site.Name
Write-Host "Site: $siteName"
$rules = Get-WebConfigurationProperty -Filter "system.webServer/rewrite/rules/rule" -PSPath "IIS:\Sites\$siteName" -Name "."
foreach ($rule in $rules) {
Write-Host "`tRule: $($rule.Name)"
$action = $rule | Select-Object -ExpandProperty action
Write-Host "`t`tType: $($action.type)"
Write-Host "`t`tURL: $($action.url)"
}
}
是否可以使用 powershell 仅检查在服务器级别创建的规则?