2010-08-22 80 views
0

http://mysite.com/go.php?site=http://somesite.com/main/?s=12&action=load簡單的PHP元重定向腳本不工作

<?php 
$url = $_GET['site']; 

echo "<meta http-equiv=\"refresh\" content=\"0;url=" . $url . "\">"; 

但是,它帶我到http://somesite.com/main/?s=12其加載失敗。

如何讓它去http://somesite.com/main/?s=12&action=load

+1

更正:有PHP中沒有 '元重定向'。這是愚蠢的HTML重定向。 – 2010-08-22 19:12:02

回答

0

[編輯]:新的解決方案

這就像一個魅力。我在我的機器上測試過。

$url = urldecode(substr(http_build_query($_GET),5)); 
echo "<meta http-equiv=\"refresh\" content=\"0;url=" . $url . "\">"; 

舊的解決方案(沒有工作)
你的代碼改成這樣:

$url = $_GET['site']; 
echo "<meta http-equiv=\"refresh\" content=\"0;url=" . urlencode($url) . "\">"; 
+0

這不會解決問題:URL本身已經沒有正確編碼。 – 2010-08-22 19:35:46

+0

@Pekka,我現在修改了代碼。 – shamittomar 2010-08-23 02:03:30

4

你需要urlencode()傳遞作爲site變量事先(即創建go.php鏈接時)的URL。

作爲一個側面說明,如果這是唯一的事情你的頁面輸出中,爲什麼不使用

header("Location: ".$url); 

它會向瀏覽器發出一個302 Found標題,告訴它跟在新的位置,而不是輸出HTML(如果輸出沒有合適的頁面結構,它將被打斷)。

0

你需要你傳遞給site參數的參數進行編碼。您可以在PHP中使用urlencode()或在javascript中使用encodeURI()

所以這使得它像:

http://mysite.com/go.php?site=http%3a%2f%2fsomesite.com%2fmain%2f%3fs%3d12%26action%3dload 

現在在PHP中,你可以這樣做:

<?php 
header("Location: ".$_GET['site']); 
?>