3

IIS7 の URL 書き換え機能を使用して URL を変更しています。

/main.asp?category=Name_Of_A_Product

の中へ:

/category/name-of-a-product/

アンダースコアをハイフンに置き換える方法が見つからないことを除いて、作業の大部分を行う以下のリダイレクトおよび書き換えルールを作成しました。

各 URL にはゼロから多くのアンダースコアを含めることができ、301 リダイレクトの連鎖を避けるために、それらを 1 つの正規表現に置き換えようとしています (これは SEO に悪いと思われるため)。

これがどのように(または)できるか知っていますか?

<rule name="Redirect REAL to FRIEDNLY" enabled="true" stopProcessing="true">
    <match url="^main\.asp$" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
        <add input="{QUERY_STRING}" pattern="^category=([^=&amp;]+)($|&amp;(.*))$" />
     </conditions>
    <action type="Redirect" url="category/{ToLower:{C:1}}/" appendQueryString="false" />
</rule>

<rule name="Rewrite FRIEDNLY to REAL" stopProcessing="false">
    <match url="^category/([^/]+)/?$" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Rewrite" url="main.asp?category={R:1}" />
</rule>
4

1 に答える 1

2

残念ながら、IIS7にはいくつかの制限があります。

  • 9つのグループしかキャプチャできませんC:1...C:9
  • 文字列関数は1つだけで、それはToLower

そのため、最大8つのアンダースコアで区切られた最大9つの単語を含むURLに制限され(例/main.asp?category=One_Two_Three_Four_Five_Six_Seven_Eight_Nine)、9つの書き換えルールを使用する必要があります。

一言:/main.asp?category=Product

<rule name="Redirect REAL to FRIEDNLY 1" enabled="true" stopProcessing="true">
<match url="^main\.asp$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
    <add input="{QUERY_STRING}" pattern="^category=([A-Za-z]+)$" />
 </conditions>
<action type="Redirect" url="category/{ToLower:{C:1}}/" appendQueryString="false" />
</rule>

2つの単語:/main.asp?category=Some_Product

<rule name="Redirect REAL to FRIEDNLY 2" enabled="true" stopProcessing="true">
<match url="^main\.asp$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
    <add input="{QUERY_STRING}" pattern="^category=([A-Za-z]+)_([A-Za-z]+)$" />
 </conditions>
<action type="Redirect" url="category/{ToLower:{C:1}}-{ToLower:{C:2}}/" appendQueryString="false" />
</rule>

3つの単語:/main.asp?category=Some_New_Product

<rule name="Redirect REAL to FRIEDNLY 3" enabled="true" stopProcessing="true">
<match url="^main\.asp$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
    <add input="{QUERY_STRING}" pattern="^category=([A-Za-z]+)_([A-Za-z]+)_([A-Za-z]+)$" />
 </conditions>
<action type="Redirect" url="category/{ToLower:{C:1}}-{ToLower:{C:2}}-{ToLower:{C:3}}/" appendQueryString="false" />
</rule>

            ... ... ... ........。

于 2013-03-07T13:48:37.023 に答える