RewriteRule:用加号替换连字符

时间:2017-03-30 07:38:01

标签: string .htaccess mod-rewrite replace

我刚刚将我的网站移至新的固定链接结构,并且需要对某些网址执行以下操作。

我想参加决赛" slug"在数字之后 /Annuaire-Artisan-106-creation-complete-de-salle-de-bains.htm

将连字符替换为加号,并在没有最终.htm的情况下重定向到/travaux/new+slug+with+plus+signs

......所以

/Annuaire-Artisan-106-creation-complete-de-salle-de-bains.htm

成为

/travaux/creation+complete+de+salle+de+bains

我目前有:

RewriteRule ^Annuaire-Artisan-([0-9]+)-(.*)-(.*).htm$ /Annuaire-Artisan-$1-$2+$3.htm [L,R,NE]

...正确地将最后一部分中的连字符转换为加号:

/Annuaire-Artisan-106-creation+complete+de+salle+de+bains.htm

但我找不到第二个RewriteRule来忽略最初的Annuaire-Artisan-106-和最终.htm并重写为/travaux/creation+complete+de+salle+de+bains

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:1)

首先,在此阶段不要使用R|redirect标志,因为客户端将为每个替换的连字符发出新请求。搜索引擎也是如此,这可能对排名不利。而是单独使用L标志,或者N|next给出

RewriteRule ^(Annuaire-Artisan-[0-9]+)-(.*)-(.*)\.htm$ /$1-$2+$3.htm [N=100,NE]

N=100将循环限制为最多100个连字符。如果您愿意,可以将其调整为更低。

然后,以下规则将删除.htm并替换前导部分。它采用类似的模式,现在,它将客户端重定向到新的URL

RewriteRule ^Annuaire-Artisan-[0-9]+-(.*)\.htm$ /travaux/$1 [R,L,NE]

如果一切正常,您可以将R替换为R=301permanent redirect)。 从不使用R=301进行测试。