如何检测文件是否被访问或请求?

AI有一个PHP文件,如果用户直接访问它,他应该被重定向到另一个位置,但如果我的脚本通过ajax调用它,它应该没有什么特别的。

例如,如果用户访问

/site/page.php 

他应该被重定向到

 /index.php?view=page 

但如果他在index.php?view=page则文件应加载而不重定向。

我怎样才能做到这一点?

编辑 :如果你想确定是否通过Javascript请求脚本,你将不得不以某种方式发出信号。

几个工具包定义标题X-Requested-With 。 在这种情况下,您可以使用以下命令检查Javascript调用:

 if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { //requested with Javascript } 

您可以检查debug_backtrace给出的结果大小。

或者(更好),您可以检查$_SERVER['SCRIPT_FILENAME']

 if (realpath(__FILE__) == realpath($_SERVER['SCRIPT_FILENAME'])) { //this one was requested; not in include } 

通过“它应该没有什么特别的”你的意思是它不应该重定向?

所以Q真的是如果用户直接访问PHP文件的URL,它应该重定向,如果通过AJAX,正常处理? (要真正澄清,你的意思是通过URL而不是通过包含声明,对吧?)

答:你不能。 Artefacto提到HTTP_X_REQUESTED_WITH标题 – 当然,但这可能是假的。

用户直接访问URL真的很糟糕吗? 如果答案是“OMG是的!” 那么系统的设计方式可能有问题。 重新设计它直到答案是“实际上,我认为它不会真的受伤。”

如果您真的不希望有人访问/site/page.php ,您应该考虑在您的Web根目录之外移动/site/page.php 。 然后让你的index.php根据需要加载它: