Если я запрашиваю site/page.php#hash то $_SERVER['REQUEST_URI'] является только /page.php .
Есть ли способ узнать в php (без дальнейшего ajax), что пользователь запросил страницу с #hash ?
благодаря
Краткий ответ: Нет.
Хэш не передается серверу, он существует только на стороне клиента. Это по дизайну. Если решение вашей проблемы связано с необходимостью знать хэш-сервер, вы выбрали неправильный способ этого.
Почему бы вам не использовать метод $_GET php (вместо использования hash (#))?
if(isset($_GET['hash'])){/*do something*/}
# Находится только на стороне клиента, а php не может получить к нему доступ.