gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:05:27 25 4
gpt4 key购买 nike

我正在使用 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>

最佳答案

不幸的是,IIS7 有一些限制:

  • 您只能捕获 9 个组 C:1 ... C:9
  • 只有一个字符串函数,那就是 ToLower

因此,您将被限制为最多 9 个单词并由最多 8 个下划线分隔的 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>

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

关于regex - IIS7 URL 重写 - 如何用正则表达式中的连字符替换所有下划线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10617410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com