使用正则表达式将 301 重定向到具有不同编号的新 url

Posted

技术标签:

【中文标题】使用正则表达式将 301 重定向到具有不同编号的新 url【英文标题】:Redirect 301 with regular expressions to new url with different numeration 【发布时间】:2021-04-04 10:00:46 【问题描述】:

我移动了我的系统论坛,我需要一些重定向。我很难重定向这个网址。

website.com/folder1/123456-name-of-article
website.com/folder1/name-of-article-r654321

您可以查看此更改:

    旧名文章前有一个数字:number-name 新名称文章相同,但末尾有其他数字和字母“r”:name-rnumber

添加新数据 重定向 URL 示例:

原始网址: https://www.website.com/folder/2087-name-of-the-article

来源网址 https://www.website.com/folder/name-of-the-article-r929/

【问题讨论】:

您新显示的示例 URL 与您最初的问题完全不同,请不要更改要求,最好让旧问题在那里,您可以打开一个 nee 问题,看起来像他们完全不同,谢谢。 【参考方案1】:

第一种解决方案(通用的一种,它不检查 url 是否从文件夹 1 开始):根据您显示的示例,您能否尝试以下操作。请确保在测试 URL 之前清除浏览器缓存。

RewriteEngine ON
RewriteCond %REQUEST_URI ^/([\w-]+)/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])-(.*)/?$
RewriteRule ^(.*)$ http://%HTTP_HOST/%1/%8-r%7%6%5%4%3%2 [R=301,L]

或者不使用 RewriteCond:

RewriteEngine ON
RewriteRule ^([\w-]+)/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])-(.*)/?$ http://%HTTP_HOST/$1/$8-r$7$6$5$4$3$2 [R=301,L]

当我使用链接http://localhost/folder1/123456-name-of-article 测试上述规则时,它会在后端重写为http://localhost/folder1/name-of-article-r654321



第二个解决方案(它检查 uri 从文件夹 1 开始的地方): 以上规则是通用规则,如果您想检查 URI 是否专门从 folder1 开始,那么尝试以下规则,确保上述规则或以下规则一次仅在您的 .htaccess 文件中。

RewriteEngine ON
RewriteCond %REQUEST_URI ^/(folder1)/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])-(.*)/?$ [NC]
RewriteRule ^(.*)$ http://%HTTP_HOST/%1/%8-r%7%6%5%4%3%2 [R=301,L]

或仅在单个 RewriteRule 尝试中没有 RewriteCond:

RewriteEngine ON
RewriteRule ^(folder1)/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])-(.*)/?$ http://%HTTP_HOST/$1/$8-r$7$6$5$4$3$2 [R=301,L]

【讨论】:

感谢@RavinderSingh13 澄清我的网址。当我输入数字 123456 时,它是任意数字,当我输入 7654321 时,它也是任意数字,但与前一个不同。 @juanma,确定我没有在我的解决方案中硬编码数字。长度是固定的还是像它的任何范围一样?请让我知道。 @juanma 您在上面的评论中没有回答 RavinderSingh13 的问题,他的解决方案适合您吗? 对不起@bruno,我仍然无法测试它。我会在我做的时候放上信息。 @juanma,您新显示的示例网址与您最初的问题完全不同,请不要更改要求,最好让旧问题在那里,您可以打开一个nee问题,看起来它们完全不同,谢谢。

以上是关于使用正则表达式将 301 重定向到具有不同编号的新 url的主要内容,如果未能解决你的问题,请参考以下文章

301 重定向正则表达式模式

htaccess正则表达式301重定向

尝试使用 301 redirectmatch 重定向旧 URL 是最接近的新 URL

301 使用 IIS 重定向到具有命名锚点的 URL

我如何 .htaccess 301 将所有页面/文件(除了一个)重定向到新域?

使用 301 重定向重定向 404 是将现有页面重定向到主页