我有一個PHP文件,如果用戶直接訪問它,他應該被重定向到另一個位置,但是如果我的腳本通過ajax調用它,它應該沒有什麼特別的。如何檢測是否正在訪問或請求文件?
例如,如果用戶訪問
/site/page.php
他應該被重定向到
/index.php?view=page
但如果他是在index.php?view=page
文件應該沒有重定向加載。
我該怎麼做?
我有一個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頭 - 當然,但這可能是僞造的。
用戶直接訪問網址真的很糟糕嗎? 如果答案是「OMG是!」那麼系統的設計方式可能有問題。 重新設計它直到答案是「其實,我想它不會真的受傷。」
在這種情況下,它是否可以僞造並不重要。重要的是頁面重定向,因爲搜索引擎無法正常工作。 – BrunoLM 2010-09-12 21:51:24
搜索引擎?我不明白。你不希望這個網頁出現在搜索引擎中?如果此頁面僅通過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
如果你真的不想讓某人訪問/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();
}
?>
您是否在爲Ajax調用使用框架?如果是這樣,哪一個? jQuery和其他一些人發送了一個特殊的頭文件。 – 2010-09-12 21:21:42
等一下,你的問題是什麼。它檢測到Ajax調用,或者檢測到訪問的URL?我不明白。 – 2010-09-12 21:23:27
用戶無法訪問'/ site/page.php',但他可以訪問'/index.php?v=page',它調用了該URL並獲取其內容 – BrunoLM 2010-09-12 21:25:23