使用正则表达式将 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 redirectmatch 重定向旧 URL 是最接近的新 URL