2013-05-10 22 views
6

Ich benutze ein Formular und die "Get" -Methode, um Benutzern eine Rückgabemöglichkeit zu einer unbekannten URL, die sie von meiner Website stammen, wie unten angegeben. Ich ziehe das vor, nur den Zurückknopf des Browsers und es funktioniert ohne Javascript.Entfernen Sie Fragezeichen hinzugefügt zu URL mit Formular 'Get' Methode

Das Problem, das ich habe, ist, dass einige Browser (Chrom, Safari, es gibt vielleicht andere) ein Fragezeichen am Ende der URL hinzufügen, die sie zurückverweisen. Ich möchte das nicht aus Gründen der Privatsphäre.

Meine Frage ist entweder:

1) Kann ich das Fragezeichen in meinem PHP-Code irgendwie verhindern; oder

2) Bitte könnte mir jemand zeigen, wie die URL zu umleiten .htaccess verwenden, ich habe möglicherweise URLs, die enden könnte: -

.html? 

.htm? 

.php? 

/? 

Vielen Dank im Voraus.

<?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

Verwenden Sie den Referer nicht. es ist oft falsch/gefälscht und generell unzuverlässig. –

+0

Sogar innerhalb meiner eigenen Website?Ich habe bisher nicht gemerkt, dass es falsch ist. – martin

+0

Marc B hat Recht. Im Allgemeinen können Sie HTTP_REFERER nicht vertrauen. IMHO ... – paulsm4

Antwort

5

Die ? wahrscheinlich hinzugefügt wird, weil Sie aus einem Formular eine GET Anfrage tun.

Warum nicht etwas wie:

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

Danke, aber ich möchte vor allem, dass es ohne JavaScript funktioniert. – martin

+0

Nun, Sie könnten immer 'POST' verwenden:/ – Halcyon

+0

Sie haben Recht, dass GET das Fragezeichen verursacht. Ich war mir nicht sicher über POST. Könnte es ein Problem geben, wenn die Zielseite bereits ein POST-Formular für einen anderen Zweck hat? – martin

-1

In der .htaccess sollten Sie etwas wie dieses:

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

Durch das obige Stück Ihrer .htaccess hinzugefügt, wenn eine URL wie myPage-whatever.html genannt wird es ist einfach so, als würde man anrufen myPHPfile.php?var=whatever

+0

... was ganz nicht hilft, die Frage zu beantworten. Ja, so benutzen Sie RewriteRules, aber es macht absolut nichts, um Fragezeichen vom Ende der aufgerufenen URL zu entfernen. – BlaM

0

Ist es sachdienlich, dass Sie ein Formular dafür verwenden? Warum nicht einen Hyperlink verwenden und ihn wie gewünscht mit CSS gestalten?

Sie können versuchen, eine Schaltfläche zu verwenden, anstatt einen Eingabewert zu erstellen, der übergeben wird.

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

Ich kenne die URL nicht im Voraus? – martin

+0

Ich nahm an, dass es nur mit einem Formular funktionierte. Ich werde nachsehen. – martin

1

Verwendung POST Methode statt GET

0

Statt um zufällige URLs der Entsendung (was nicht wirklich eine gute Idee ist) betrachten Umleitungen

wäre eine Lösung

<?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>'; 
} 
?> 

sein dann in 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'; 
} 

können Sie action="GET" und $_GET durch action="POST" und $_POST ersetzen und es wird das gleiche funktionieren.

oder einfach

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

beide noch eine neue Geschichte Eintrag im Browser erstellen.