Перезапись URL {QUERY-STRING} входного регулярного выражения для обработки строки динамического запроса - PullRequest
0 голосов
/ 08 марта 2019

У меня есть веб-сайт asp.net со старыми URL, как показано ниже: http://example.org/Home.aspx?val1={val1}&val2={val2}&some-dynamic-query-string={some-value}

Я хочу перенаправить на новые URL, оптимизированные для SEO, как показано ниже: http://example.org/Home/{val1}/{val2}?some-dynamic-query-string={some-value}

Я не могу выяснить правила перезаписи URL в модуле перезаписи URL web.config.

Пожалуйста, обратите внимание, что запрос к http://example.org/Home.aspx может иметь любую комбинацию этих строк запроса, и соответственно он будет перенаправлен на новый URL.

Пример:

http://example.org/Home.aspx перенаправляется на http://example.org/Home

http://example.org/Home.aspx?val1=22 перенаправляется на http://example.org/Home/22

http://example.org/Home.aspx?val1=6&val2=3a перенаправляется на http://example.org/Home/6/3a

http://example.org/Home.aspx?val1=62&val2=4r&fb=123a перенаправляется на http://example.org/Home/62/4r?&fb=123a

Я использую приведенные ниже правила, но они не работают в последнем примере.

<rewrite>
<rules>
  <rule name="HomeRedirect3" stopProcessing="true">
    <match url="Home.aspx/?"/>
    <conditions logicalGrouping="MatchAll">
      <add input="{QUERY_STRING}" matchType="Pattern" pattern="^val1=(.*)&amp;val2=(.*)"/>
    </conditions>
    <action type="Redirect" redirectType="Temporary" url="/Home/{C:1}/{C:2}?{C:3}" appendQueryString="false" />
  </rule>
  <rule name="HomeRedirect1" stopProcessing="true">
    <match url="Home.aspx/?"/>
    <conditions logicalGrouping="MatchAll">
      <add input="{QUERY_STRING}" matchType="Pattern" pattern="^val1=([a-zA-Z0-9\-+])"/>
    </conditions>
    <action type="Redirect" redirectType="Temporary" url="/Home/{C:1}" appendQueryString="false" />
  </rule>
  <rule name="HomeRedirect4" stopProcessing="true">
    <match url="(.*).aspx/?"/>
    <conditions logicalGrouping="MatchAll">
      <add input="{REQUEST_FILENAME}" matchType="IsFile"/>
      <add input="{REQUEST_FILENAME}" matchType="IsDirectory"/>
    </conditions>
    <action type="Redirect" redirectType="Temporary" url="/{R:1}" appendQueryString="false" />
  </rule>
</rules>

...