Regex 通过htaccess将旧的动态URL重定向到seo友好的URL

Regex 通过htaccess将旧的动态URL重定向到seo友好的URL,regex,apache,.htaccess,url,mod-rewrite,Regex,Apache,.htaccess,Url,Mod Rewrite,我已经浏览了其他张贴的问题,似乎找不到适合我具体情况的答案。我已经建立了动态URL(rr.php?rrid=5),我正在切换到seo友好的URL(rr/5/name/),我已经完成了这部分工作 RewriteRule ^rr/([0-9]+)/([a-z\+\-]+)/?$ /rr.php?rrid=$1 [L] 我遇到的问题是实现301重定向,告诉搜索引擎URL已经更改,而不会导致重定向循环。此外,我还有数百个rrid=#,我想用一种类似于上述规则的方法来执行301,其中/name/部分根据

我已经浏览了其他张贴的问题,似乎找不到适合我具体情况的答案。我已经建立了动态URL(rr.php?rrid=5),我正在切换到seo友好的URL(rr/5/name/),我已经完成了这部分工作

RewriteRule ^rr/([0-9]+)/([a-z\+\-]+)/?$ /rr.php?rrid=$1 [L]
我遇到的问题是实现301重定向,告诉搜索引擎URL已经更改,而不会导致重定向循环。此外,我还有数百个rrid=#,我想用一种类似于上述规则的方法来执行301,其中/name/部分根据rrid的不同而不同=#


我知道有一种方法可以添加和重写上述规则,但我不知道如何编写301重定向,而不必逐一进行操作。

您需要一个用于301处理的附加规则。将此代码放在
文档\u ROOT/.htaccess
文件中:

RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} \s/+rr\.php\?rrrid=([0-9]+) [NC]
RewriteRule ^ /rr/%1? [R=302,L]

RewriteRule ^rr/([0-9]+)/?$ /rr.php?rrid=$1 [L,QSA]
RewriteRule ^rr/([0-9]+)/([a-z+-]+)/?$ /rr.php?rrid=$1 [L,QSA]

rrid始终是一个数字,因此该条件下的regrex是否可以为([0-9+])?此外,我试图301重定向,但你有302,这只是一个临时重定向。你这样做有什么原因吗?用302而不是301有什么原因吗?没有具体的原因,但是只有在一切看起来都很好的时候才在测试中使用302,然后将其改为301。原因是301被浏览器主动缓存。好吧,这是可行的,但我唯一关心的是,当旧URL指向rr/5,而我在网站地图中提交的新URL是rr/5/name/时,谷歌会标记我重复的内容。它们都会被编入索引吗?或者你的解决方案会涵盖这些吗?你的
rr.php
链接看起来怎么样?您是否有
/rr.php?rrid=123
/rr.php?rrid=$1&name=somename