.htaccess htaccess 301重定向以插入字符

.htaccess htaccess 301重定向以插入字符,.htaccess,.htaccess,我需要任何在最后一个斜杠后以数字字符结尾的url,以便在数字之前插入字符(33;)。我已经到了这个地步,错误地只抓取最后一个斜杠前面的最后一组(非斜杠字符/),然后插入下划线和数字。 不工作: ^([^/]+/)+([0-9]+)$ $1_$2 [QSA,L,R=301] 所以我需要mysite.com/long/url/34566才能成为mysite.com/long/url//u 34566 上述代码使mysite.com/url//u 34566 谢谢 您可以使用此规则: Rewrit

我需要任何在最后一个斜杠后以数字字符结尾的url,以便在数字之前插入字符(33;)。我已经到了这个地步,错误地只抓取最后一个斜杠前面的最后一组(非斜杠字符/),然后插入下划线和数字。 不工作:

 ^([^/]+/)+([0-9]+)$ $1_$2 [QSA,L,R=301]
所以我需要mysite.com/long/url/34566才能成为mysite.com/long/url//u 34566 上述代码使mysite.com/url//u 34566

谢谢

您可以使用此规则:

RewriteRule ^(.+)/([0-9]+)$ /$1/_$2 [NE,L,R=301]
在正则表达式中,问题在于
([^/]+/)+
,因为只有
/
之前最后捕获的组在
$1
中被捕获,因此
/long/url/34566
url
在$1中被捕获


在我的规则中,
+
将匹配最后一个
/
之前的任何内容,因此它将捕获
/long/url

我的似乎与最后一个组匹配-就像你的一样。仅供参考,这是一个wordpress网站,但我先运行规则。问题在于
([^/]+/)+
中只捕获了
$1
中的最后一部分,因此您在
$1
中获得
url
。这里的
+
将匹配上一个
/
之前的任何内容。您需要保留此规则作为第一条规则,并完全清除浏览器缓存。谢谢。我确实清除了缓存,但新url正在删除旧url的一部分。因此,mysite.com/really/long/url/1234正在成为mysite.com/long/url//u 1234。由于您的代码看起来应该可以工作,可能还发生了其他一些事情:(可能您在root.htaccess中没有此规则。如果您在该规则上面定义了
RewriteBase
,那么您可以使用:
RewriteRule^(+.+)/([0-9]+)$$1/$2[NE,L,R=301]
刚刚看到并进行了更改,它就可以工作了!谢谢!!