I found a way to do this:
function courses_rewrite_rules($wp_rewrite) {
$new_rules = array(
'courses/(.*)' => 'index.php?page_id=34'
);
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
function courses_flush_rules() {
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
add_action('init', 'courses_flush_rules');
add_action('generate_rewrite_rules', 'courses_rewrite_rules');
BUT
This piece of code does what I want. But everytime a wordpress page (not necessarily /courses ) is requested it delete and re-create the rewrite rules on the database, even if theres no change. I think this can cause some problem in the future.
THE SOLUTION
function courses_set_rule() {
add_rewrite_rule('courses/(.*)', 'index.php?page_id=34', 'top');
}
add_action('init', 'courses_set_rule');