2016-06-18 8 views
0

Ich habe diese einfache .htaccess-Datei, in der ich versuche, die Abfragezeichenfolge von der URL zu löschen.Nächste URL, die direkt neben der ersten URL anfügt, während versucht wird, URL-Umschreiben zu verwenden

Aktuelle URL: - search.php/page? Page = 1 & s = 14.

Ich möchte URL erreichen: - Seite/1/14.

so meine Htaccess-Datei sieht so aus.

RewriteEngine On 
RewriteRule ^page/([0-9]+)/([A-Za-z0-9]+)$ search.php?page=$1&s=$2 

und meine href sieht wie folgt aus

if($i==$page){ 
    $numbers.='<li><a class="active" href="page/'.$i.'/'.$sterm.'">'.$i.'</a></span></li>'; 
    } 
    else { 
     $numbers.='<li><a href="page/'.$i.'/'.$sterm.'">'.$i.'</a></span></li>'; 
    } 

die fein arbeitet aber aber wenn ich auf Seite 2 von Seite 1 meine url das sieht aus wie zu gehen versuche: - Seite/14.01/Seite/2/14. Warum passiert es?

+1

Sind Sie sicher, dass Sie nicht nur ein "/" am Anfang Ihres href in Ihrem Link verpassen, so dass der Browser auf page2 url RELATIVE mit der URL page1 gehen? – MartinMouritzen

+0

Ich habe meine Frage aktualisiert. Wenn ich jedoch "/" am Anfang verwende Paginierung scheint nicht zu funktionieren –

+0

Toni, wenn Sie Ihre URL anrufen ist es so etwas wie "http://domain.com/page/1/14" richtig ? Und wenn Sie die Zahlen manuell in etwas wie "http://domain.com/page/2/14" ändern, funktioniert es immer noch richtig? Es sollte in diesem Fall nichts mit Ihrem .htaccess zu tun haben. – MartinMouritzen

Antwort

1

Das Problem hat nichts mit Ihrer Neuschreibung zu tun.

bearbeiten Ihren Code

if($i==$page){ 
    $numbers.='<li><a class="active" href="/page/'.$i.'/'.$sterm.'">'.$i.'</a></span></li>'; 
} 
else { 
    $numbers.='<li><a href="/page/'.$i.'/'.$sterm.'">'.$i.'</a></span></li>'; 
} 

Und es wird das erwartete Ergebnis.

+0

Durch das Hinzufügen eines "/" vor meinen Links funktioniert die Paginierung nicht. Weil sie den Basisordner von der URL entfernt.Versuchte es schon –

+0

Ah, aber Sie müssen Ihren Basisordner berücksichtigen. Also lassen Sie uns sagen, dass Ihre Basisordner ist "myfolder" dann würden Sie den Code etwas machen wie if ($ i == $ page) { $ Zahlen = '

  • '.$i.'
  • .'; } sonst { $ zahlen. = '
  • '.$i.'
  • '; } Der Versuch, es relativ zu tun, wird nur Kopfschmerzen verursachen. Du müsstest deine href auf etwas wie "../../../page/".$i."/".$term." "Setzen, was nicht sehr wartbar ist. – MartinMouritzen

    +0

    Awesome Mann, ich war dabei, meine Haare von xD zu ziehen. Danke –

    2

    Wie MartinMouritzen erwähnt, wenn Sie ein href Tag haben, das nicht mit / beginnt, wird es den aktuellen Pfad als Basis verwenden. In Ihrem Fall ist der aktuelle Pfad page/1/14, daher ist der neue Pfad, den der Browser verwendet, page/1/14/page/2/14. Fügen Sie einen führenden Schrägstrich zu jedem href Attribut hinzu, um dieses Problem zu beheben.

    Zusätzlich sollten Sie Ihre RewriteRule ein wenig zwicken, so dass es dann folgende Schrägstriche erlauben:

    RewriteEngine On 
    RewriteRule ^page/([0-9]+)/([A-Za-z0-9]+)/?$ search.php?page=$1&s=$2 
    

    Sie auch vorsichtig sein sollte Variable direkt auf HTML zu schreiben, sterm wie es scheint, könnte Benutzer gegeben werden? Wenn das der Fall ist, könnte es definitiv eine XSS-Schwachstelle sein. Sie sollten sich wirklich sanieren nur alle Variablen, wie sie auf die Seite geschrieben sind zu werden, wie folgt aus:

    $s_url = '/page/' . htmlspecialchars($i) . '/' . htmlspecialchars($sterm); 
    if($i == $page) { 
        $numbers .= '<li><a class="active" href="' . $s_url . '">' . htmlspecialchars($i) . '</a></span></li>'; 
    } else { 
        $numbers .= '<li><a href="' . $s_url . '">' . htmlspecialchars($i) . '</a></span></li>'; 
    } 
    

    Schließlich sieht es aus wie Sie eine Schließung Spanne haben, aber keine Öffnung Spanne? Obwohl es HTML technisch ist, Tags zu verflochten (aka <b><i>something</b></i>), ist es keine gute Form. Sie sollten auf jeden Fall die offene span innerhalb der li Element, oder verschieben Sie die schließende span außerhalb der li-Element (so die li und span Tags sind nicht miteinander verflochten, nur verschachtelt).

    +0

    Ben Martin hatte Recht ich habe vergessen, meine Basis-Ordner zu wählen.Und Sie entdeckte etwas, das ich nicht wirklich bemerkt habe. Danke für den Vorschlag. –

    Verwandte Themen