Есть несколько способов вы можете решить это, самый простой, вероятно, полностью с правилами mod_rewrite. Вы можете делать все, что вы хотите сделать с двумя правилами перезаписей:
- перенаправлять все запросы с подчеркиванием тиром
- переписывать все запросы с тиром назад, чтобы подчеркнуть для внутреннего интерфейса (Кохана) легко обрабатывать.
Я не проверял это, но я думаю, что это должно работать:
# redirect all requests with underscore to dash (this will do three dashes at a time, hopefully results in only one redirect for the client)
RewriteCond %{REQUEST_URI} ([^_]*)_([^_]*)
RewriteCond %1-%3 ([^_]*)(_([^_]*))?
RewriteCond %1-%3 ([^_]*)(_([^_]*))?
RewriteCond %1-%3 ([^_]*)-*$
RewriteRule .* %1 [L,R=301,QSA]
# rewrite all requests with dash back to underscore
RewriteCond %{REQUEST_URI} ([^-]*)-([^-]*)
RewriteCond %1_%3 ([^-]*)(-([^-]*))?
RewriteCond %1_%3 ([^-]*)(-([^-]*))?
RewriteCond %1_%3 ([^-]*)_*$
RewriteRule .* %1 [L]