将旧的特定过滤器重定向到类别的基本 URL

将旧的特定过滤器重定向到类别的基本 URL

旧版本的过滤器和排序创建了类似的链接(每个部分的解释如下 - 这里是使用不同视图和过滤器的同一类别的示例):

https://example.com/category-one/1/default/1/f_at_175_3/1
https://example.com/category-two/1/full/3/f_at_185_1/1
https://example.com/category-three/1/default/1/f_at_175_3/1/f_producer_7/1
https://example.com/category-name-and-size-40x40/1/default/1/f_at_175_3/1/f_producer_7/1

我们需要将它们重定向到新链接:

https://example.com/category1/1/

这是我目前的代码。当我使用“htaccess checker”工具时,当我使用标志“R=301”时,会出现如下错误 - 那么在这种情况下是否可以使用 301?:
“无效行:RewriteRule 无效,它在模式或替换中包含空格吗?”

RewriteEngine on
RewriteRule ^([a-z0-9-]+)/[0-9]{1,2}/(default|full)/[1-9](/f_[A-Za-z]+_[0-9]{1,3}(_[0-9]{1,2})?/1)+/?$ /$1/ [R=301, L]

详细信息:

这些链接的结构如下:

https://example.com/category/A/default/B/f_filter_C_D/E
  • category- 每个类别名称均独一无二

  • A- 当前查看的页面数量,因此我们可以有例如 10 个 X 类别的页面 - 在这种情况下,这里会出现 1-10 个数字

  • default- 定义视图类型(网格或列表),只有 2 个选项:“默认”和“完整”

  • B- 排序ID(按名称、价格等),只有4种排序类型(1、2、3、4)

  • f_- 是每次选择任何过滤器时出现的固定部分。

  • filter- 定义使用的过滤器类型,有以下几种类型(at、producer、color 等)

  • C- 过滤器的 ID,这里有各种数字(1-999)

  • D- 我不确定这个数字有什么用,但它总是出现在“过滤器”部分之后(范围为 1-99)

  • E- 未知数字,但这里始终为“1”

.htaccess 文件内没有其他引用类别链接的指令。

答案1

RewriteRule ^([a-z0-9-]+)/[0-9]{1,2}/(default|full)/[1-9](/f_[A-Za-z]+_[0-9]{1,3}(_[0-9]{1,2})?/1)+/?$ /$1/ [R=301, L]

该指令“无效”,因为它包含空间在里面RewriteRule 旗帜(第三个)论点[R=301, L]——它应该是[R=301,L]空间是中的分隔符.htaccess,因此这实际上将第三个参数一分为二。(该工具报告的错误并不完全正确,或者充其量只是含糊其辞。)

但是,你没有捕获第二条路径段,即1(或A在你的结构分解)。因此,这将重定向到/category1/,而不是/category1/1/,如您的示例中所示。

否则,您的指令/正则表达式似乎没问题。

请在文件顶部尝试以下内容.htaccess

RewriteRule ^([\w-]+/\d{1,2}/)(default|full)/\d(/f_[a-zA-Z]+_\d{1,3}(_\d{1,2})?/1)+$ /$1 [R=302,L]

补充笔记:

  • 反向$1引用现在包含A尾部斜杠,因此应该从代换细绳。
  • 我已经删除了模式中的可选尾随斜杠,因为它不存在于您的示例 URL 中或 URL 格式的描述中。
  • 我使用简写字符类\w来匹配类别。这与您所述的字符相匹配A-Z_但略短一些。
  • 我使用了\d而不是[0-9](和[1-9])——只是稍微短一点。

测试前您需要清除浏览器缓存。首先使用 302(临时)重定向进行测试,以避免错误的缓存问题。

更新:(从评论来看)“页码”(第二个路径段)应该构成目标 URL 中其自身 URL 参数的一部分(而不是附加路径段,紧接着类别),因此需要单独捕获。而且尾部斜线似乎不是必需的。

因此,应将其改为:

RewriteRule ^([\w-]+)/(\d{1,2})/(default|full)/\d(/f_[a-zA-Z]+_\d{1,3}(_\d{1,2})?/1)+$ /$1?page=$2 [R=302,L]

QSA如果可能需要传递到目标 URL 的附加查询字符串,您还需要添加标志。

答案2

是的,我没有提到类别名称也包含-- 不是_。有时还有尺寸数字。我在上一篇文章中编辑了我的示例。

另外,我忘记重定向到特定页面数量,因此这里是新版本:

RewriteEngine on
RewriteRule ^([a-z0-9-]+)/(\d{1,2})/(default|full)/[1-9](/f_[A-Za-z]+_\d{1,3}(_\d{1,2})?/1)+/?$ /$1?page=$2 [R=301,L]


因此现在我们从/category-name-40x40/16/default/1/f_producer_41/1/f_at_173_23/1重定向
到:
/category-name-40x40?page=16

相关内容