我把一个旧的网站移到了新的cms上,有些内容有新系统上找不到的链接。
例如,在旧系统中有一个名为https://example.com/newsletter/1234/123的链接在新的一个,我不需要这些id在最后。因此,我想将用户重定向到直接https://example.com/newsletter/。
我在我的htaccess文件中写了以下内容:
RewriteRule ^(.*newsletter)(.*) $1 [L,R=301]
不幸的是,这给了我一个"too man redirects"。错误。有人能指出我犯的错误吗?
我计划使用正则表达式来捕获包含名称"newsletter"的所有链接。并删除url的其余部分以重定向用户。如有任何帮助,不胜感激。
使用(.*newsletter)(.*)
会导致重写只匹配/newsletter
,因为.*
匹配零个或多个字符。这会使mod_rewrite进入循环。
.+
,并且我将在/?
之前添加可选的匹配尾随斜杠。没有必要在()
中捕获它,因为您不会在$2
中重用它。
RewriteRule ^(.*newsletter)/?.+ $1 [L,R=301]
你的例子从.*
开始。如果你真的需要的话,把它留在里面。但是,如果您真的只是想匹配/newsletter/123/1234
而不是/someother/newsletter/123/1234
,则将其简化为:
RewriteRule ^newsletter/?.+ /newsletter [L,R=301]
当你测试这个,使用一个私人/隐身浏览窗口或一个新的浏览器。浏览器积极缓存301重定向,如果你正在与缓存作斗争,它会使调试重写规则变得非常困难。