IIS Rewrite для отдельной строки запроса в версию SEO - PullRequest
0 голосов
/ 26 июня 2019

Я часами пытаюсь заставить работать следующий IIS:

Входящий URL:

https://example.com/services/control/status?Id=SO1234567

Ожидаемый результат:

https://example.com/orders/detail/SO1234567

Правило перезаписи IIS:

<rule name="Custom rewrite rule" patternSyntax="ExactMatch" stopProcessing="true">
    <match url="^services/control/status\?Id=(SO|so){1}([0-9]*)" />
    <action type="Rewrite" url="/orders/detail/{R:0}" appendQueryString="false" logRewrittenUrl="true" />
</rule>

Дополнительная информация:

  • Я использую один веб-сайт в IIS.
  • 1 веб-приложений для API на этом веб-сайте.
  • Угловые файлы на веб-сайте.

Угловые правила:

<rule name="Angular Routes" stopProcessing="false">
    <match url=".*" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
    </conditions>
    <action type="Rewrite" url="/" />
</rule>

Полный раздел перезаписи:

<rewrite>
    <rules>
        <clear />
        <rule name="Angular Routes" stopProcessing="false">
            <match url=".*" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
                <add input="{REQUEST_URI}" pattern="^/(marketplace)" negate="true" />
            </conditions>
            <action type="Rewrite" url="/" />
        </rule>

        <rule name="Custom rewrite rule" patternSyntax="ExactMatch" stopProcessing="true">
    <match url="^services/control/status\?Id=(SO|so){1}([0-9]*)" />
    <action type="Rewrite" url="/orders/detail/{R:0}" appendQueryString="false" logRewrittenUrl="true" />
</rule>
</rule>
    </rules>        
</rewrite>

1 Ответ

1 голос
/ 27 июня 2019

Насколько я знаю, шаблон URL не будет соответствовать строке запроса. Если вы хотите получить значение строки запроса, вы должны использовать условие перезаписи.

Подробности, вы можете обратиться к правилу ниже:

            <rule name="QueryStringRue" stopProcessing="true">
                <match url=".*" />
                <conditions>
                    <add input="{QUERY_STRING}" pattern="^Id=([0-9a-zA-Z]*)" />
                </conditions>
                <action type="Redirect" url="https://example.com/orders/detail/{C:0}" />
            </rule>
...