重写 301 重定向结构的规则

Rewrite Rule for 301 redirections structure

我开发了一个项目,其中 url 结构已从旧网页更改,我需要创建 301 重定向以避免 SEO 处罚。看了很多书后,我找不到如何重写。

旧URL

/es/madrid/comprar/893134/prop-712/

新建URL

/es/property/prop-712/

想法方法

RewriteRule ^//property/  //////

我需要的是仅使用第一个路径作为参数 (/es/) 和最后一个 (/prop-712/) 来重组 URL /$first/property/$second 并删除 </code>, <code> & </code>.</p> <p>如您所见,我们共享 URL 的最后一个参数 (<code>prop-712)。知道这是否可能吗?

使用 mod_rewrite 在根 .htaccess 文件的顶部尝试以下操作:

RewriteRule ^([a-z]{2})(?:/[\w-]+){3}/([\w-]+?)/?$ https://example.com//property// [R=301,L]

这会将 /<lang>/<one>/<two>/<three>/<prop>/ 形式的 URL(尾部斜线可选)重定向到 https://example.com/<lang>/property/<prop>/<lang> 是任意两个小写字母语言代码,example.com 是您的规范主机名。这恰好匹配中间删除的 3 个路径段。

正则表达式 [\w-]+ 匹配每个路径段,包括 属性(最后一个路径段)。这匹配 a-zA-Z0-9_(下划线)和 -(连字符)范围内的字符。

只有第一个和最后一个路径段被 捕获 并稍后分别使用 </code> 和 <code> 反向引用进行引用。匹配 3 个内部路径段的中间带括号的子模式(即 (?:/[\w-]+){3})是 non-capturing(由 (?: 前缀表示)。

您不需要重复 RewriteEngine 指令,因为这已经出现在 WordPress 代码块内的文件中。

首先使用 302(临时)重定向进行测试,以防止潜在的缓存问题。只有当您确定它按预期工作时才更改为 301(永久)重定向。


快速浏览一下您的“想法”:

RewriteRule ^//property/  //////

.htaccess 文件中,RewriteRule 模式 匹配的 URL-path 不以斜杠开头。

$n 形式的反向引用用于引用 RewriteRule 模式 (第一个参数)中的捕获组。反向引用只能用在替换字符串(第二个参数)*1中。您不能在 RewriteRule pattern 本身(这是一个标准的 regex)中使用反向引用 - $ 携带这里的特殊含义是 end-of-string 锚点(正则表达式语法)。

(*1 ...和任何的 TestString (第一个)参数之前的 RewriteCond 指令,但这不适用于此处。)

参考: