重写 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-z
、A-Z
、0-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
指令,但这不适用于此处。)
参考:
我开发了一个项目,其中 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-z
、A-Z
、0-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
指令,但这不适用于此处。)
参考: