【问题标题】:htaccess rewrite underscores to dashes for a specific directoryhtaccess 将下划线重写为特定目录的破折号
【发布时间】:2026-02-22 16:35:01
【问题描述】:

我可以使用以下内容成功地将下划线重写为破折号——但我需要代码仅适用于某个目录,而我无法让该部分工作。

作品:

RewriteRule ^([^_]*)_([^_]*)_(.*)$ /$1-$2-$3 [R=301,L]
RewriteRule ^([^_]*)_(.*)$ /$1-$2 [R=301,L]

不工作:

RewriteRule ^/media/entry/([^_]*)_([^_]*)_(.*)$ /media/entry/$1-$2-$3 [E=unscors:Yes]
RewriteRule ^/media/entry/([^_]*)_(.*)$ /media/entry/$1-$2 [E=unscors:Yes]
RewriteCond %{ENV:unscors} ^Yes$
RewriteRule ^/media/entry/(.*)$ http://domain.com/media/entry/$1 [R=301,L]

【问题讨论】:

  • RewriteRule 应该没有前导 /。改为RewriteRule ^media/entry/......... 试试

标签: .htaccess mod-rewrite seo


【解决方案1】:

当您从 RewriteRule 模式中删除所有前导 / 时,所有模式都应该可以正常工作(如前两个示例一样)。

如下代码:

RewriteRule ^media/entry/([^_]*)_([^_]*)_(.*)$ /media/entry/$1-$2-$3 [E=unscors:Yes]
RewriteRule ^media/entry/([^_]*)_(.*)$ /media/entry/$1-$2 [E=unscors:Yes]
RewriteCond %{ENV:unscors} ^Yes$
RewriteRule ^media/entry/(.*)$ http://domain.com/media/entry/$1 [R=301,L]

还有很好的online htaccess tester 可以帮助您验证您的配置,例如

该工具有一些限制,即目前没有实现某些功能,如%{REQUEST_FILENAME}%{ENV:...},但对于简单的规则应该没问题。

我希望这会有所帮助。

【讨论】: