重定向过多.设置htaccess重定向



我把一个旧的网站移到了新的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重定向,如果你正在与缓存作斗争,它会使调试重写规则变得非常困难。

最新更新