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]+)(?=$)

演示:https://regex101.com/r/kW8zU0/4