2013-05-10 34 views
6

我正在使用表單和'get'方法爲用戶提供一個返回選項,它們來自我的網站中的未知網址,如下面的代碼所示。我更喜歡這只是瀏覽器後退按鈕,它沒有JavaScript的作品。使用窗體'get'方法刪除添加到網址的問號

我遇到的問題是某些瀏覽器(Chrome,safari,可能有其他瀏覽器)正在向它們返回的url末尾添加一個問號。我不希望出於seo原因。

我的問題可以是:

1)我可以防止我的PHP代碼不知何故內的問號;或

2)請能有人告訴我如何使用重定向htaccess的鏈接,我可能有可能結束的網址: -

.html? 

.htm? 

.php? 

/? 

在此先感謝。

<?php 
if (isset ($_SERVER['HTTP_REFERER'])) { 
$url = htmlspecialchars($_SERVER['HTTP_REFERER']); 
echo '<br /><form action="' . $url . '" method="get"> 
<div id="submit"><input type="submit" value="Return to previous page" /></div> 
</form>'; 
} 
?> 
+3

請勿使用引用者。它經常是錯誤/僞造的,通常是不可靠的。 – 2013-05-10 15:59:46

+0

即使在我自己的網站?到目前爲止,我還沒有注意到它是錯誤的。 – martin 2013-05-10 16:04:07

+0

Marc B是正確的。一般來說,你不能相信HTTP_REFERER。恕我直言... – paulsm4 2013-05-10 16:07:01

回答

5

?可能被添加,因爲你正在做從形式GET請求。

爲什麼不這樣做:

<input type="button" onclick='document.location.href=<?php echo json_encode($url);?>'>; 
+0

謝謝,但我特別希望它能夠在沒有javascript的情況下工作。 – martin 2013-05-10 16:14:10

+0

那麼,你總是可以使用'POST':/ – Halcyon 2013-05-10 16:18:22

+0

GET是正確的,導致問號。我不確定使用POST。如果目標頁面已有用於其他目的的POST表單,那麼會出現問題嗎? – martin 2013-05-10 16:31:55

-1

在htaccess你應該有這樣的事情:

RewriteEngine on 
RewriteRule ^myPage-([a-zA-Z0-9_]*).html myPHPfile.php?var=$1 

通過上述件添加到您的htaccess,當像myPage-whatever.html URL被稱爲,這就像打電話myPHPfile.php?var=whatever

+0

......完全無助於回答問題。是的,這就是你使用RewriteRules的方式,但它完全不會從被調用URL的末尾刪除問號。 – BlaM 2014-01-13 10:12:19

0

它是否適合您使用此表單?爲什麼不使用超鏈接並使用CSS來設置樣式?

您可以使用按鈕嘗試,而不是創建一個將被傳遞的輸入值。

<form action="url" method="get"> 
    <button type="submit">Return to previous page</button> 
</form> 
+0

我不知道網址嗎? – martin 2013-05-10 16:15:34

+0

我認爲它只適用於表單。我會看一下。 – martin 2013-05-10 16:23:22

1

使用POST方法,而不是GET

0

相反張貼到隨機的網址(這是不是一個真正的好主意)的考慮使用重定向

一個解決辦法是

<?php 
if (isset ($_SERVER['HTTP_REFERER'])) { 
$url = htmlspecialchars($_SERVER['HTTP_REFERER'],ENT_QUOTES,'UTF-8'); 
echo '<br /><form action="redirect.php" method="get"> 
<input type="hidden" name="return" value="'.$url.'"> 
<div id="submit"><input type="submit" value="Return to previous page" /></div> 
</form>'; 
} 
?> 

然後在redirect.php

<?php 
if (isset ($_GET['return']) { 
    $url = $_GET['return']; 
    header('Location: '.$url, true, 303); // or 302 for compatibility reasons 
    echo '<a href="'.htmlspecialchars($url,ENT_QUOTES,'UTF-8').'">Continue</a>'; 
    exit; 
}else{ 
    echo 'Error, no redirect specified'; 
} 

您可以使用action="POST"$_POST替換action="GET"$_GET,它的工作原理是一樣的。

或者乾脆

if (isset ($_SERVER['HTTP_REFERER'])) { 
    $url = htmlspecialchars($_SERVER['HTTP_REFERER'],ENT_QUOTES,'UTF-8'); 
    echo '<a href="'.$url.'">Return to previous page</a>'; 
} 

都仍然會創建在瀏覽器中一個新的歷史記錄條目。