【问题标题】:regex challenge for htaccess 301 redirecthtaccess 301重定向的正则表达式挑战
【发布时间】:2020-09-23 14:23:35
【问题描述】:

我有许多类似的标签和类别 URL,我想在一个干净的正则表达式语句中重定向它们(如果可能的话)。示例网址是:

table, th, td {
  border: 1px solid black;
}
 <table style="width:100%">
  <tr>
    <th>URL</th>
    <th>Redirect To</th>
  </tr>
  <tr>
    <td>/category/categoryname-2/</td>
    <td>/blog/category/categoryname/</td>
  </tr>
  <tr>
    <td>/category/categoryname-2/page/3/</td>
    <td>/blog/category/categoryname/</td>
  </tr>
  <tr>
    <td>/category/categoryname/</td>
    <td>/blog/category/categoryname/</td>
  </tr>
  <tr>
    <td>/category/categoryname/page/3/</td>
    <td>/blog/category/categoryname/</td>
  </tr>
  <tr>
    <td>/tag/tagname-2/</td>
    <td>/blog/tag/tagname/</td>
  </tr>
  <tr>
    <td>/tag/tagname-2/page/3/</td>
    <td>/blog/tag/tagname/</td>
  </tr>
  <tr>
    <td>/tag/tagname/</td>
    <td>/blog/tag/tagname/</td>
  </tr>
  <tr>
    <td>/tag/tagname/page/3/</td>
    <td>/blog/tag/tagname/</td>
  </tr>
  <tr>
    <td>/blog/page/5/</td>
    <td>/blog/</td>
  </tr>
</table> 

请注意,一些标签和类别名称的名称末尾带有“-2”,我想将其删除。

我在这方面做了很好的尝试,但还没有走得很远;不幸的是,-2 件让我感到难过,因此转向这里的专业知识。

【问题讨论】:

    标签: regex .htaccess


    【解决方案1】:

    我想我明白了。我认为这涵盖了所有类别和标签重定向。 *已经解释了我认为它在做什么,但可能是错误的,并且可能会像设计一样偶然得到解决方案。

    由于浏览器缓存和 CDN 缓存,也很难完全测试,但在隐身时似乎可以工作:

    RedirectMatch 301 ^/(category|tag)/(([a-z]+)|([a-z]+-[a-z]+))(?:-2)?/(?:page/.*)?$ /blog/$1/$2/
    

    (category|tag) 匹配单词categorytag。这将返回 $1(第 1 组)

    (([a-z]+)|([a-z]+-[a-z]+))(?:-2)?
    

    某些类别的名称中有-;因此我必须处理-2(我们想要删除)和真正的-(我们想要保留)。

    (([a-z]+)|([a-z]+-[a-z]+)) - 这将返回组 $2。中间的| 表示要么返回| 之前的内容,要么返回之后的内容。

    ([a-z]+) - 查找第一个完整的文本块,即在遇到数字或标点符号时停止(在本例中为 -)。

    ([a-z]+-[a-z]+) - 这会找到完整的字符串,然后是连字符,然后是另一个完整的字符串。这说明带有连字符的标签名称。如果连字符后没有文本块,则不会返回任何内容...这是我们希望发生的。

    (?:-2)? 这表示可能有-2。最后的问号表示可能有,但如果没有也没关系。括号内的 ?: 表示忽略 -2 如果它在那里。

    (?:page/.*)? 查找单词“page”和之后的任何内容,如果找到,则放入“ignore”组。最后的问号表示不需要存在。

    【讨论】:

      猜你喜欢
      • 2018-05-31
      • 2012-06-21
      • 2017-06-21
      • 2014-12-05
      • 1970-01-01
      • 2015-01-30
      • 1970-01-01
      • 2019-04-17
      相关资源
      最近更新 更多