RegExp web.config - Select path after / 并重写为 URL param
RegExp web.config - Select path after / and rewrite as URL param
我有一个要求更新 web.config 文件,以便它替换 / 之后的路径并重写 URL 如下:
域.com/acct01 -> domain.com/#/?id=acct01
域。com/acct02 -> domain.com/#/?id=acct02
域。com/acct03 -> domain.com/#/?id=acct03
...
目前,对于每个帐户,我都将以下内容添加到 web.confg 文件中。因此,对于上面的示例,我需要执行以下操作:
<rule name="acct01" stopProcessing="true">
<match url="^acct01$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="https://domain.com/#/?id=acct01" />
</rule>
<rule name="acct02" stopProcessing="true">
<match url="^acct02$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="https://domain.com/#/?id=acct02" />
</rule>
<rule name="acct03" stopProcessing="true">
<match url="^acct03$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="https://domain.com/#/?id=acct03" />
</rule>
正如您所看到的,在许多帐户之后这会变得笨拙。我正在寻找一种通用的方法来捕获 URL 的最后一个/内部之后的值,以及一种更通用的方法来替换 id URL 之后的操作部分中的 URL参数。例如:
<rule name="addIDFromPath" stopProcessing="true">
<match url="[REGEX FOR GENERAL EXTRACTION OF PATH AFTER LAST /]" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="https://domain.com/#/?id=[VALUE OF PATH EXTRACTED]" />
</rule>
如果 URL 包含#,则应将其忽略并保留,因为这表明它已被重写。
我们在安装了 IIS 的 Windows Box 上,因此可以考虑 web.config 文件的替代方案。
谢谢!
不确定我是否理解正确的问题,但如果想法是用 /#/?id=
替换最后一个 /
那么这个模式就可以完成工作,替换
(?=\/([a-z0-9]+)$)
与 /#/?id=
.
你可以在这里测试:https://regex101.com/r/kW8zU0/1
编辑
大概是这样的:
<rule name="addIDFromPath" stopProcessing="true">
<match url="(^|\/)([a-z0-9]+)(?=$)" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="https://domain.com/#/?id={R:2}" />
</rule>
组号不确定,可以是{R:1}
模式:(^|\/)([a-z0-9]+)(?=$)
我有一个要求更新 web.config 文件,以便它替换 / 之后的路径并重写 URL 如下:
域.com/acct01 -> domain.com/#/?id=acct01
域。com/acct02 -> domain.com/#/?id=acct02
域。com/acct03 -> domain.com/#/?id=acct03
...
目前,对于每个帐户,我都将以下内容添加到 web.confg 文件中。因此,对于上面的示例,我需要执行以下操作:
<rule name="acct01" stopProcessing="true">
<match url="^acct01$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="https://domain.com/#/?id=acct01" />
</rule>
<rule name="acct02" stopProcessing="true">
<match url="^acct02$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="https://domain.com/#/?id=acct02" />
</rule>
<rule name="acct03" stopProcessing="true">
<match url="^acct03$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="https://domain.com/#/?id=acct03" />
</rule>
正如您所看到的,在许多帐户之后这会变得笨拙。我正在寻找一种通用的方法来捕获 URL 的最后一个/内部之后的值,以及一种更通用的方法来替换 id URL 之后的操作部分中的 URL参数。例如:
<rule name="addIDFromPath" stopProcessing="true">
<match url="[REGEX FOR GENERAL EXTRACTION OF PATH AFTER LAST /]" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="https://domain.com/#/?id=[VALUE OF PATH EXTRACTED]" />
</rule>
如果 URL 包含#,则应将其忽略并保留,因为这表明它已被重写。
我们在安装了 IIS 的 Windows Box 上,因此可以考虑 web.config 文件的替代方案。
谢谢!
不确定我是否理解正确的问题,但如果想法是用 /#/?id=
替换最后一个 /
那么这个模式就可以完成工作,替换
(?=\/([a-z0-9]+)$)
与 /#/?id=
.
你可以在这里测试:https://regex101.com/r/kW8zU0/1
编辑
大概是这样的:
<rule name="addIDFromPath" stopProcessing="true">
<match url="(^|\/)([a-z0-9]+)(?=$)" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="https://domain.com/#/?id={R:2}" />
</rule>
组号不确定,可以是{R:1}
模式:(^|\/)([a-z0-9]+)(?=$)