【问题标题】:RewriteRule : replace hyphens with plus signsRewriteRule : 用加号替换连字符
【发布时间】:2017-08-23 23:57:50
【问题描述】:

我刚刚将我的网站移动到一个新的永久链接结构,需要对一些 URL 执行以下操作。

我想取数字后面的最后一个“slug” /Annuaire-Artisan-106-creation-complete-de-salle-de-bains.htm

将连字符替换为加号,并重定向到 /travaux/new+slug+with+plus+signs 而不使用最终的 .htm。

...所以

/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

任何帮助将不胜感激:)

【问题讨论】:

  • 您可以在给定规则的替换字符串中忽略(删除)它

标签: string .htaccess mod-rewrite replace


【解决方案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=301 (permanent redirect)。 从不R=301测试。

【讨论】:

    猜你喜欢
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    相关资源
    最近更新 更多