2015-07-02 52 views
0

我有一個URL,例如xyz.com/123456。當我在瀏覽器中打開它時,url會被重定向到xyz.com/test_user,其中123456是用戶標識,test_user是用戶名。我想從第一個URL重定向後提取第二個URL。重定向後在PHP中獲取瀏覽器的URL

我編寫了一個腳本,可以從文本文件中獲取不同用戶ID的輸入並生成第一個URL。我想要在瀏覽器中或以某種方式通過cmd運行URL,並獲取重定向的第二個URL。 我曾嘗試在Curl中使用EFFECTIVE_URL,但它一直返回第一個URL。我也嘗試了$ _SERVER,但它返回的是腳本文件而不是URL。

有什麼辦法讓我可以在重定向後得到在瀏覽器窗口中輸入的URL? 或者,甚至可能甚至沒有打開瀏覽器中的URL,我可以得到重定向的URL?

+0

嘗試使用的print_r($ _ SERVER);並檢查 –

+0

我認爲你可以使用'$ _SERVER [「REDIRECT_URL」]或類似的東西。只需轉儲'$ _SERVER'並檢查。 – Halcyon

+0

您是否使用.htaccess或PHP重定向它? – JohnnyFaldo

回答

0

有三種設置,這將有助於你得到重定向URL快一點(而無需實際等待捲曲重定向你)

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); //don't follow the redirect 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // do return the transfer 
curl_setopt($ch, CURLOPT_HEADER, true);   // do show the header 

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); //either get the certificates, or just disable checking 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 

然後,當您最終執行請求,您可以從標題匹配中找到重定向。

$url = 'https://www.facebook.com/4?_rdr=p'; //remember to add ?_rdr=p to the end of your URL 

$response = curl_exec($ch); 
preg_match_all('/^Location:(.*)$/mi', $response, $matches); 
print_r($matches); 

您的網址應該在$matches[0]

+0

'$ ch = curl_init(); \t \t curl_setopt($ ch,CURLOPT_URL,$ content); \t \t curl_setopt($ ch,CURLOPT_HEADER,true); \t \t curl_setopt($ ch,CURLOPT_FOLLOWLOCATION,false); //必須設置爲true,以便PHP遵循任何「Location:」標題 \t \t curl_setopt($ ch,CURLOPT_RETURNTRANSFER,true); \t \t $ response = curl_exec($ ch); // $ a將包含所有標題 \t \t preg_match_all('/ ^位置:(。*)$/mi',$ response,$ matches); \t \t $ url = $ matches [0]; \t \t echo $ url;' –

+0

我使用了這段代碼。但它現在在最後一個回聲中給了我一個字符串錯誤數組。( –

+0

)您應該'echo $ matches [0]',嘗試'print_r($ matches)'查看所有的URL。 –

0

當您使用PHP重定向時 - 一種選擇是在用戶着陸時設置一個$_SESSION值,然後重定向它們。 e.g

$_SESSION['original_url'] = $_SERVER[HTTP_HOST]; 

您重定向然後搶在頁面上:

$previous_url = $_SESSION['original_url']; 

http://php.net/manual/en/book.session.php

+0

因爲我在本地主機上運行腳本。這隻返回本地主機地址 –

+0

這是什麼問題? :) – JohnnyFaldo