【发布时间】:2015-06-19 15:42:21
【问题描述】:
我一直在寻找这个问题的答案,但我自己无法解决。我正在尝试做的是将一组大约 1500 多个 URL 从一种格式重定向到另一种格式,其中唯一一致的是两者之间的最后一串数字。
如果相关,旧 URL 来自 PHP 站点,新 URL 将用于 WordPress 站点,所以显然我需要使用 regex 和 htaccess。
当前网址的格式如下:
[domain]/[one or more categories separated by a forward slash]/[post name]/[id]
由于 Wordpress 永久链接系统的限制,新的 URL 结构将是:
[domain]/[one or more categories separated by a forward slash]/[post name]-[id]
理论上,我可以匹配 ID 并使中间部分完全任意,但这似乎不起作用。可能是 WordPress 的永久链接没有我想象的那么灵活,但以下是我迄今为止尝试过的两条规则:
RewriteRule ^([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)/(\d*)(/)$ http://localhost/ats-new/([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)(-)$3/ [R=301,NC,L]
RewriteRule ^([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)/(\d*)(/)$ http://localhost/ats-new/([A-Za-z0-9\-]+)/$2-$3(/) [R=301,NE,NC,L]
我正在尝试匹配末尾的数字,因为这将在两个 URL 之间保持一致,并且保证对于每个帖子始终是唯一的。还需要注意的是,即使ID不同,类别的数量也不会相同,因为两个系统之间存储类别的方式不同。
我的问题是,由于原始代码和 WordPress 字符串转义之间的空格转义方式不同,我无法保证除了 ID 之外的 URL 的任何部分都将是两者之间的相同匹配。 我上面链接的规则也不能始终如一地工作,但是当他们这样做时,他们会将我发送到一个看起来像这样的 URL:
[domain]/([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)(-)[id]
我可能在这里遗漏了一些相当简单的东西,但我一直在兜圈子,所以我想我会在这里询问是否有人可以帮助阐明这一点。我已经环顾四周,但找不到任何与我正在寻找的东西相同的东西。我在下面链接的现有主题并没有真正为我提供可以用来自己解决这个问题的答案。
Redirection 301 with htaccess with url variables
301 Redirect htaccess Change URL Structure
提前致谢。
【问题讨论】:
-
您不能在 Rewriterule 的替换字符串中使用正则表达式。它必须是一个实际的字符串。
-
提供新旧网址的示例
标签: regex wordpress .htaccess mod-rewrite redirect