Я знаю, что это старый вопрос, но вот мое решение. Он не тратит ресурсы, оптимизирован для SEO и не требует использования bash, вместо этого полагаясь на php
.
Поместите это в ваш .htaccess
после запуска механизма перезаписи
RewriteCond %{REQUEST_URI} (.*)_(.*)
RewriteRule (.*)$ /tools/underscore_to_hyphen.php?rewrite_uri=$1 [NC,L]
Это отправит все файлы сценария php
underscore_to_hyphen.php
, в который вы поместили этот код:
<?php
$path = $_GET['unchanged_path'];
$input_uri = $_GET['rewrite_uri'];
$output_uri = str_replace("_", "-", $input_uri);
//For redirect uncoment:
header("HTTP/1.1 301 Moved Permanently");
header("Location: $path$output_uri");
exit();
//For rewrite uncoment:
//include_once "$_SERVER[DOCUMENT_ROOT]$path$output_uri";
?>
Который отправит его в нужное место.
Поскольку это правило перезаписи без перенаправления в .htaccess
, оно приведет к одному перенаправлению или перезаписи для пользователя / паука.
Обратите внимание, что это только частично проверено, и я использовал его в обратном порядке, чтобы изменить -
на _
.