Rewriterule 从旧论坛永久移至新论坛

Rewriterule moved permanently from an old forum to new forum

有没有办法在 .htaccess 中放置一个小的重写规则,以将超过 20.000 links 从旧的基于 phpBB 的论坛重定向到新的 phpBB 论坛? 旧的link是这样的:

https://example.com/t123456-some-title

新的link是这样的:

https://example.com/forum/viewtopic.php?t=123456

t-123456是旧版论坛主题编号的可变编号,编号相同但有viewtopic.php?t=123456

我认为可以使用一些正则表达式,但我不知道如何实现。

可能是这样的:

RewriteEngine On

RewriteBase /

RewriteRule ^t-([0-9]+)-([a-zA-Z0-9-]+)$ /forum/viewtopic.php?t= [R,L]

非常感谢@MrWhite,重写规则完美无缺。

RewriteRule ^t(\d+) /forum/viewtopic.php?t= [R=301,L]
RewriteRule ^t-([0-9]+)-([a-zA-Z0-9-]+)$ /forum/viewtopic.php?t= [R,L]

几乎,除了 substitution 字符串中的 </code> 反向引用(引用第二个捕获子组)将包含 <code>some-title,而不是 123456.

您似乎不需要捕获 title,因此您可以从第二组中删除周围的括号。事实上,如果您完全丢弃 title 那么您可能根本不需要匹配它,除非它会导致与其他 URL 发生冲突?您只对 id.

感兴趣

这最终应该是 301(永久)重定向,但是,它目前是 302(临时)重定向(默认)。因此,在您测试它按预期工作后,将 R 更改为 R=301

例如:

RewriteRule ^t-(\d+) /forum/viewtopic.php?t= [R=301,L]

这匹配 开始 /t-<number> 并重定向到 /forum/viewtopic.php?t=<number>

的任何 URL

UPDATE: Sorry, I was mistaken, the old URL is like t123456 without the hyphen

然后只需删除 RewriteRule 模式 中的连字符。 IE。 ^t(\d+)