访问AJAX页面时如何显示未找到页面(404)

时间:2014-03-09 07:45:33

标签: php

我可以阻止从浏览器地址栏直接访问AJAX页面(如果他们从浏览器访问,我会存在PHP代码)。例如,这是一个AJAX页面:www.example.com/ajax/ajax.php,我需要向用户显示此页面不存在 - 类似于访问真正不存在的页面时发生的情况。我从以下网站上执行此操作:

ErrorDocument 404 /page_not_found.php

因此,当用户访问该页面时:www.example.com/ajax/ajax.php,我需要他们查看该页面的内容:page_not_found.php

注1:AJAX页面是具有从Javascript到达的PHP代码的页面,用户不能访问这些页面,因为它们没有可见的代码显示为HTML。

注意2:在AJAX页面的顶部,我检查访问源,如果是来自浏览器地址栏,那么我退出代码,我使用$ _SERVER ['HTTP_REFERER']。

我如何保护我的ajax页面免受浏览器的直接访问:

为了简化代码,我在页​​面顶部添加:

// To prevent from accessing the ajax page from the browser address bar direct
if( strtolower($_SERVER['HTTP_REFERER']) != 'http://example.com/index.php'){
    exit; // I need to show the content of the 404 error page before this exit 
}

我不想做任何重定向!寻找一种虚假的方式来显示找不到的页面。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

我在退出代码之前使用 file_get_contents 来阅读 not_found.php 页面解决了这个问题。因此,这样,它将显示为服务器上不存在任何真实页面,并且也不会发生重定向。

// To prevent from accessing the ajax page from the browser address bar directly
if( strtolower($_SERVER['HTTP_REFERER']) != 'http://example.com/index.php'){

    header("HTTP/1.0 404 Not Found");        

    file_get_contents("http://example.com/not_found.php"); // will bring the 404 page 

    exit; // no more execution
}

答案 1 :(得分:0)

我不确定AJAX页面的含义是什么,但我们假设您正在使用某些javascript来抓取该页面的内容。每当您向页面发送请求时,您都应该检查回复中的404 header并重定向/显示您的page_no_found.php

例如:

xhr = new XMLHttpRequest();
xhr.open('GET', 'non_existen_ajax_page', true);
xhr.send();
if(xhr.status == 404) {
  //redirect or display to user your page_not_found.php
} else {
  //display content of a page
}

答案 2 :(得分:0)

来自the PHP Docs

  

[有]标题以字符串“HTTP /”开头(大小写不重要),它将用于确定要发送的HTTP状态代码。例如,如果您已将Apache配置为使用PHP脚本来处理丢失文件的请求(使用ErrorDocument指令),您可能需要确保脚本生成正确的状态代码。

<?php
  header("HTTP/1.0 404 Not Found");
?>

强调补充。

因此,无论您何时从浏览器访问“退出”代码,请使用上面的标题字符串。

希望这有帮助。