2010-09-12 42 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(); 
} 
?> 
相關問題