У меня есть веб-сайт 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=(.*)&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>