【问题标题】:Rewriterule moved permanently from an old forum to new forumRewriterule 从旧论坛永久迁移到新论坛
【发布时间】:2022-01-05 16:01:37
【问题描述】:

有没有办法在 .htaccess 中放置一个小的 rewriterule 以将 20.000 多个链接从基于 phpBB 的旧论坛重定向到新的 phpBB 论坛? 旧链接是这样的:

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

新的链接是这样的:

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=$2 [R,L]

非常感谢@MrWhite,重写工作完美。

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

【问题讨论】:

  • 在您的示例 URL 中,您使用了 t123456,但您稍后使用连字符引用它,即。 t-123456?
  • 对不起,我弄错了,旧的 URL 就像没有连字符的 t123456,新的 URL 像 viewtopic.php?t=123456 一样。

标签: apache .htaccess mod-rewrite url-rewriting


【解决方案1】:
RewriteRule ^t-([0-9]+)-([a-zA-Z0-9-]+)$ /forum/viewtopic.php?t=$2 [R,L]

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

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

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

例如:

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

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

更新:对不起,我弄错了,旧网址就像t123456,没有连字符

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

【讨论】:

  • 所以如果我理解的话,RewriteRule ^t(\d+) /forum/viewtopic.php?t=$1 [R=301,L] 应该可以工作,没有连字符。
  • @relik 是的,如果您的旧 URL 的格式为 /t123456-some-title数字前没有连字符)。此重定向需要靠近 .htaccess 文件的顶部(顺序很重要)。测试前使用 302(临时)重定向并清除浏览器缓存。
  • 好的,这周我会测试,我会告诉你它是否有效。谢谢怀特先生。
  • 非常感谢@MrWhite,重写工作完美。 RewriteRule ^t(\d+) /forum/viewtopic.php?t=$1 [R=301,L] 我将根据您的提示为其他链接制作一些重写规则。 =)
猜你喜欢
  • 2016-04-14
  • 2012-02-03
  • 2019-11-02
  • 1970-01-01
  • 2017-09-04
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多