我开发了一个项目,其中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-z
、A-Z
、0-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