While most browsers seem to work OK with relative URLs like that in a redirect, the HTTP-1.1 specification says that a Location header should use a full URI.
<?php
$base_url = sprintf(
'http%s://%s/',
(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') ? 's' : '',
$_SERVER['SERVER_NAME']
);
header('Location: ' . $base_url . 'sub_directory/file_name.php');
PS: @ krik: $_SERVER['DOCUMENT_ROOT'] will give the local file system path on the host, not the host portion of a URI that would direct a HTTP request to that directory.