2010-09-12 107 views
0

我有一个PHP文件,如果用户直接访问它,他应该被重定向到另一个位置,但是如果我的脚本通过ajax调用它,它应该没有什么特别的。如何检测是否正在访问或请求文件?

例如,如果用户访问

/site/page.php 

他应该被重定向到

/index.php?view=page 

但如果他是在index.php?view=page文件应该没有重定向加载。

我该怎么做?

+0

您是否在为Ajax调用使用框架?如果是这样,哪一个? jQuery和其他一些人发送了一个特殊的头文件。 – 2010-09-12 21:21:42

+0

等一下,你的问题是什么。它检测到Ajax调用,或者检测到访问的URL?我不明白。 – 2010-09-12 21:23:27

+0

用户无法访问'/ site/page.php',但他可以访问'/index.php?v=page',它调用了该URL并获取其内容 – BrunoLM 2010-09-12 21:25:23

回答

5

编辑:如果您想确定是否通过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 
} 

+0

我不认为这是什么OP手段。 (虽然我不确定* OP的含义是什么) – 2010-09-12 21:23:52

+0

访问该页面并拨打电话的第二个答案都是正确的。 – BrunoLM 2010-09-12 21:24:29

+0

@Pekka嗯,我刚刚读了标题:p – Artefacto 2010-09-12 21:24:44

0

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

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

答:你不能。 Artefacto提到了HTTP_X_REQUESTED_WITH头 - 当然,但这可能是伪造的。

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

+0

在这种情况下,它是否可以伪造并不重要。重要的是页面重定向,因为搜索引擎无法正常工作。 – BrunoLM 2010-09-12 21:51:24

+0

搜索引擎?我不明白。你不希望这个网页出现在搜索引擎中?如果此页面仅通过Javascript AJAX调用进行链接,那么搜索引擎机器人将永远不会找到它并永远不会访问它。如果你真的很偏执,那么链接将会泄漏出去,把一个X-Robots-Tag http头放在它上面。 http://googleblog.blogspot.com/2007/07/robots-exclusion-protocol-now-with-even.html – James 2010-09-12 22:08:24

0

如果你真的不想让某人访问/site/page.php,你应该考虑将/site/page.php移到你的web根目录之外。然后让您的index.php根据需要加载它:

<?php 
$includes = "/path/to/includes"; // specified in a config file somewhere 

if ($_GET["view"] == "page") { 
    require_once(path_join($includes, "page.php")); 
    DoStuffInPageDotPHP(); 
} 
else { 
    DoSomethingElse(); 
} 
?> 
相关问题