.htaccess 使用正则表达式将301重定向到具有不同计数的新url

.htaccess 使用正则表达式将301重定向到具有不同计数的新url,.htaccess,redirect,mod-rewrite,url-rewriting,http-status-code-301,.htaccess,Redirect,Mod Rewrite,Url Rewriting,Http Status Code 301,我移动了我的系统论坛,我需要一些重定向。对我来说重定向这个URL很困难 website.com/folder1/123456-name-of-article website.com/folder1/name-of-article-r654321 您可以查看以下更改: 旧名称文章前面有一个编号:number name 新名称项目相同,但末尾有othernumber和字母r:name rnumber 添加新数据 重定向的URL示例: 原始URL: 源URL 1st solutionGeneric

我移动了我的系统论坛,我需要一些重定向。对我来说重定向这个URL很困难

website.com/folder1/123456-name-of-article
website.com/folder1/name-of-article-r654321
您可以查看以下更改:

旧名称文章前面有一个编号:number name 新名称项目相同,但末尾有othernumber和字母r:name rnumber 添加新数据 重定向的URL示例:

原始URL:

源URL

1st solutionGeneric one,其中不检查url是否从folder1开始:根据您展示的示例,请尝试以下内容。请确保在测试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]
或者不使用“重写条件”:

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]
当我用link测试上述规则时http://localhost/folder1/123456-name-of-article 它在后端重写为http://localhost/folder1/name-of-article-r654321.

第二个解决方案,它检查uri是否从folder1开始:上述规则是通用规则,如果您想检查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]
或者不使用“重写条件”仅在单个重写规则中尝试:

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]
第一个解决方案通用一,它不检查url是否从folder1开始:根据您显示的示例,请尝试以下内容。请确保在测试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]
或者不使用“重写条件”:

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]
当我用link测试上述规则时http://localhost/folder1/123456-name-of-article 它在后端重写为http://localhost/folder1/name-of-article-r654321.

第二个解决方案,它检查uri是否从folder1开始:上述规则是通用规则,如果您想检查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]
或者不使用“重写条件”仅在单个重写规则中尝试:

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对我的URL的澄清。当我输入数字123456时,它是任意数字;当我输入7654321时,它也是任意数字,但与前一个不同。@juanma,我肯定没有在我的解决方案中硬编码该数字。长度是固定的还是类似于其中的任何范围?请务必让我知道。@juanma您没有回答RavinderSingh13在他上述评论中的问题,他的解决方案适合您吗?对不起@bruno,我仍然无法测试它。我会在我做的时候把信息放进去。@juanma,你新显示的示例URL与你最初的问题完全不同,请不要改变要求,最好让旧问题留在那里,你可以打开一个nee问题,看起来它们完全不同,谢谢。谢谢@RavinderSingh13关于我的URL的澄清。当我输入数字123456时,它是任意数字;当我输入7654321时,它也是任意数字,但与前一个不同。@juanma,我肯定没有在我的解决方案中硬编码该数字。长度是固定的还是类似于其中的任何范围?请务必让我知道。@juanma您没有回答RavinderSingh13在他上述评论中的问题,他的解决方案适合您吗?对不起@bruno,我仍然无法测试它。我会在我做的时候把信息放进去。@juanma,你新显示的示例URL与你最初的问题完全不同,请不要改变要求,最好让旧问题留在那里,你可以打开一个nee问题,看起来它们完全不同,谢谢。您新显示的示例URL与初始问题完全不同,请不要更改要求,最好让旧问题出现,您可以打开一个nee问题,看起来它们完全不同,谢谢。您新显示的示例URL与初始问题完全不同,请不要改变要求,最好让老问题留在那里,你可以打开一个nee问题,看起来它们完全不同,谢谢。