2009-07-24 93 views
2

在客戶的網站上有大量重定向到特定頁面。這個頁面需要以某種方式檢測請求是否是直接的(手動輸入URI)或重定向。如何通過重定向檢測頁面是否被請求?

  1. 所有重定向都是301重定向。由於SEO規則增加了指標需要避免。 (谷歌索引單獨的值url)

  2. 我試過檢查所有的環境變量,但它們都是空的(這是正常的),在這方面內部重定向沒有任何不同(我認爲)。

  3. 檢測需要實時發生,因此日誌文件不是一個選項。

短的過程,參數通過腳本註冊的餅乾,然後將其301重定向到內容的cookie驅動的頁面。當cookie被註冊時,當有人在地址欄中重新輸入地址時,內容不會變回原始狀態。

我希望這是有道理的。

PREVIOUSLY:我在考慮狀態碼,但我不確定是否有方法在目標頁面上讀取它。 (我們已經明確表示它不起作用)

+1

這與Web服務器發送給客戶端的狀態碼無關。客戶端請求作爲重定向目標的頁面時,代碼已消失。 – 2009-07-24 15:29:34

+0

是的。我擔心你會這麼說。 :) – 2009-07-24 17:12:33

回答

1

受到Brian的啓發,我退後一步,看看究竟是什麼導致了我的問題。

可能沒有回答這個問題,但存在着部分解決問題的解決方案。 通過使用會話cookie,修改後的內容將僅存在於該特定會話中,以便下次再次訪問原始內容。 這並沒有改變這個事實,即重新輸入地址欄中的網址仍然會導致頁面使用cookie。

謝謝大家的努力幫助。

0

如果請求是重定向,應該有一個標題指示它從哪裏重定向。

+0

我也這麼認爲。但我似乎找不到解決辦法。在這種情況下HTTP_REFERER不顯示。 – 2009-07-24 17:18:10

+2

「應該」是一個強詞。 HTTP規範沒有說「應該」。可能有一個標題,但它不是一個要求,甚至是一個建議。 – 2009-07-24 17:19:23

3

如何:

my $cgi = CGI->new; 

print $cgi->redirect(
    'http://example.com/this/page/that.html?redirect=yes' 
); 

您使用區分之間的重定向可以再看看查詢字符串來決定什麼都機制。當然,這並不妨礙用戶將網址加上redirect=yes等。

您可以嘗試referer標題,但這有其自身的問題。

+0

當然,如果他們可以更新所有的請求來包含一個有用的已知查詢字符串,但正如您所指出的那樣,如果用戶將該URL標記爲更糟糕的URL,還是會鏈接到它,那麼您需要檢查其他信息(例如引用信息 - 並檢查內容不只是它存在) – 2009-07-24 16:43:42

0

我不認爲有辦法做到這一點。我能想象的唯一指標是Referer header field。但它似乎只在請求是以非HTTP方式啓動(單擊鏈接,表單提交,元刷新等)時纔會發送。

4

根據瀏覽器和中間代理的不同,可能會發生幾件事情。但是,在大多數情況下,你不能依賴任何一件事情。狀態碼是服務器發回給瀏覽器的東西,所以你不會在請求中獲得這些信息。

你不說你想解決什麼問題或爲什麼這個位很重要。你想解決什麼問題?

不要依賴你不能控制的東西,把它變成你可以控制的東西。

  1. 確保您正在做正確的重定向。有redirections for permanent and temporary moves as well as other situation

  2. 如果您不需要實時數據,您可以從日誌文件中找出數據。如果您試圖找出交通模式,這很方便,但實時並不那麼有用。

  3. 不是外部重定向,使其內部重定向。您可以通過您的Web服務器的請求週期來跟蹤它。

  4. 設置在外部重定向一個cookie,然後尋找它的下一個請求。這不會吸引那些不設置cookies的人。

  5. 添加路徑信息,以重定向,或作爲思南建議也許查詢參數。

1

這是我最近做的檢測重定向並將其公開爲應用程序的自定義請求標頭:X-Redirect: 1(使用Apache的mod_rewrite和mod_headers)。

在源極側,我通過預先計算的附加/redirect到URL路徑重定向到目標服務器的所有請求:

RewriteRule ^/(.*) http://target-server.com/redirect/$1 [L,R=permanent] 

在目標端,我檢測/redirect在路徑,通過剝離它另一個重定向,並注入一個自定義的cookie到響應:

RewriteRule ^/redirect/(.*)$ /$1 [R=permanent,L,CO=redirect:1:target-server.com:86400:/] 

而且在目標端,我轉換cookie插入的環境變量,「禁用」的cookie,那麼將env變量轉換爲定製的熱曲est頭:

RewriteCond %{HTTP_COOKIE} redirect=1 [NC] 
RewriteRule ^(.*)$ /$1 [L,CO=redirect:0:target-server.com:86400:/,E=redirect:1] 
RequestHeader set X-Redirect 1 env=redirect 
相關問題