如何通过.htaccess重写规则移除URL连字符后关键词并实现重定向
解决.htaccess重定向:移除URL连字符后的第二个关键词
嘿,我来帮你搞定这个URL重定向的问题!你的需求是把类似/currency/bitcoin-btc这样的URL永久重定向到/currency/bitcoin,也就是去掉连字符后面的所有内容对吧?
先说说你现有规则的问题
你当前的规则RewriteRule ^currency/(.*)[a-z-](.*)$ /currency/$1 [R=301,L]逻辑不够精准:
(.*)是贪婪匹配,会尽可能多抓取字符,可能会把连字符前面的部分拆分开,导致重定向结果不符合预期- 这个规则会匹配很多不必要的URL,比如包含多个连字符或其他字母的URL,容易出现误匹配
正确的重写规则
直接用下面的规则替换你现有的配置,就能精准实现需求:
RewriteEngine On RewriteRule ^currency/([^-]+)-.*$ /currency/$1 [R=301,L]
规则详解
让我拆解一下这条规则的每个部分,方便你理解:
^currency/:精准匹配URL开头的/currency/路径,确保只处理这个目录下的URL([^-]+):这是关键的捕获组,[^-]表示匹配除了连字符之外的任意字符,+表示至少匹配一个字符,所以它会捕获连字符前面的所有内容(比如bitcoin)-.*$:匹配连字符本身,以及连字符后面的所有内容直到URL结尾(比如-btc)/currency/$1:重定向目标,$1就是我们刚才捕获的连字符前面的内容,最终会指向/currency/bitcoinR=301:表示这是永久重定向,对SEO友好,浏览器和搜索引擎会记住这个重定向L:表示这是最后一条规则,一旦匹配成功就停止处理后续的重写规则
测试验证
这条规则会完美处理以下场景:
- 输入
/currency/bitcoin-btc→ 重定向到/currency/bitcoin - 输入
/currency/ethereum-eth→ 重定向到/currency/ethereum - 输入
/currency/solana-sol→ 重定向到/currency/solana
小提示
- 测试阶段可以先用
R=302临时重定向,确认所有URL都正确跳转后,再改成R=301,避免浏览器缓存错误的重定向结果 - 确保你的Apache服务器已经启用了
mod_rewrite模块,否则规则不会生效
内容的提问来源于stack exchange,提问作者Oliver
相关产品推荐
相关产品推荐

