IIS7 URL重写 - 如何用正则表达式中的连字符替换所有下划线?

问题描述 投票:3回答:1

我在IIS7中使用URL重写功能来转换URL:

/main.asp?category=Name_Of_A_Product

成:

/category/name-of-a-product/

我已经创建了下面的重定向和重写规则,除了我找不到用连字符替换下划线的方法之外,大多数工作都是如此。

每个URL可以有零和多个下划线,我试图在一个正则表达式中替换它们,以避免301重定向链(因为我认为这对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>
regex url-rewriting iis-7 hyphen
1个回答
1
投票

不幸的是IIS7有一些限制:

  • 你只能捕获9组C:1 ... C:9
  • 只有一个字符串函数,那就是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>

两个词:/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>

三个字:/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>

...            ...            ...            ...            ...            ...

© www.soinside.com 2019 - 2024. All rights reserved.