\w
chỉ đối sánh các ký tự từ trong đó ký tự từ là [a-zA-Z0-9_]
và nó không bao gồm tất cả các ký tự unicode.
Thay đổi quy tắc của bạn thành quy tắc này:
RewriteRule ^post/([^/]+)/?$ single_post.php?blog_title=$1 [L,QSA]
[^/]+
sẽ khớp với bất kỳ ký tự nào không phải là /
bao gồm cả các ký tự unicode.
Bạn cũng có thể chỉnh sửa mã php một chút:
function url_slug($str) {
$str = mb_strtolower(trim($str), 'UTF-8');
$str = preg_replace('/[^\pL\pN]+/u', ' ', $str);
$str = trim($str);
$str = preg_replace('/\h+/', '-', $str);
return $str;
}