Tienes varias variables de servidor para hacer lo q pretendes ...
Por ejemplo PHP_SELF .. con eso obtienes el nombre de la pagina q se está ejecutando.
Sabiendo que un include() o un require() (sea así o _once) lo que hace PHP es "mezclar" todo lo q se llama via estas funciones y generar una página completa de nombre tal la que los llamó, puedes usar una expresion regular por ejemplo tipo:
Código PHP:
if (!eregi("index.php", $_SERVER['PHP_SELF'])){ die("No puedes acceder directamente a este archivo.");
Con eso vemos si en la cadena q nos devulve PHP_SELF está index.php .. (y lo mira en todo el URL q prodría dar ..)
Un saludo,