重写301重定向结构的规则



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

旧URL

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

新URL

/es/property/prop-712/

想法方法

RewriteRule ^/$1/property/$5  /$1/$2/$3/$4/$5/

我需要的是仅使用第一个路径作为参数(/es/(和最后一个路径(/prop-712/(来重构URL/$first/property/$second并移除$2$3&$4

正如您将看到的,我们共享URL的最后一个参数(prop-712(。知道这是否可能吗?

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

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

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

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

只有第一个和最后一个路径段被捕获,然后分别使用$1$2反向引用进行引用。与3个内部路径段匹配的中间带括号的子模式(即(?:/[w-]+){3}(是不适用的(由(?:前缀指示(。

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

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


快速查看您的";"想法":

RewriteRule ^/$1/property/$5  /$1/$2/$3/$4/$5/

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

形式为$n的后引用用于引用RewriteRule模式中的捕获组(第一个参数(。反向引用只能在替换字符串(第二个参数(*1中使用。您不能在RewriteRule模式本身(这是一个标准的正则表达式(中使用反向引用-$在这里作为字符串结尾锚(正则表达式语法(具有特殊意义。

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

参考:

  • https://httpd.apache.org/docs/2.4/rewrite/intro.html
  • https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule

最新更新