В htaccess я хотел бы заменить символы подчеркивания дефисом, а затем перенаправить пользователя новый URL-адрес

Я хотел бы перенаправить любой запрос, который содержит символы подчеркивания на тот же URL, но с дефисами, заменяющими URL-адреса. Я видел много форумов, предлагающих сделать что-то вроде этого:

(Повторите увеличенную версию этого rewriteRule до gazillion)

rewriteRule ^([^_]*)_([^_]*)_([^_]*)_(.*)$ http://example.com/$1-$2-$3-$4 [R=301,L] rewriteRule ^([^_]*)_([^_]*)_(.*)$ http://example.com/$1-$2-$3 [R=301,L] rewriteRule ^([^_]*)_(.*)$ http://example.com/$1-$2 [R=301,L] 

Мое текущее решение в php (отлично работает):

 if(preg_match('/[_]+/', $_SERVER['REQUEST_URI'])){ $redirectUrl = preg_replace('/[_]+/','-', $_SERVER['REQUEST_URI']); header('Location: '. $redirectUrl , TRUE, 301); return; } 

Но я бы предпочел не использовать php и вместо этого хранить его в файле htaccess, не повторяя этот первый rewriteRule снова и снова, чтобы предвидеть, сколько подчеркиваний будет отображаться каждый URL-адрес. Мысли? Есть ли такой способ сделать это, не повторяя приращение rewriteRule?

—– редактировать —–

Мой текущий файл htaccess – это только стандартный WordPress, который ниже:

 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> 

См. Флаг «Next» / rewrite, который заставляет переопределять набор правил, начиная с первого правила: http://httpd.apache.org/docs/current/rewrite/flags.html#flag_n

Что-то вроде этого может работать:

 RewriteRule (.*)_(.*) $1-$2 [N] 

Как насчет объединения 2. Имеет одно правило перезаписи, которое переписывает скрипт PHP, который выполняет подстановку и перенаправление. Таким образом, вы избегаете наличия нескольких правил перезаписи, можете обрабатывать любое количество символов подчеркивания и только вызывать перенаправление PHP, когда это необходимо.