2016-08-08 53 views
1

Ich bin eine Seite erstellen, die Parameter abrufen sollte, um zu bestimmen, welcher Inhalt angezeigt werden soll. Um besser aussehende URLs zu erstellen, verwende ich .htaccess die URLs erscheinen zu lassen, wie folgend: auf die SeiteHTAccess Rewrite-Regeln mit get-Parameter

http://www.domain.com/elections/candidate-speech.php?name=candidate-name

ich getan habe dies

http://www.domain.com/elections/candidate-speech/candidate-name/

und Umleitung vor erfolgreich und verwendete Regeln wieder, die ich für eine andere Seite aber mit einer ähnlichen gewünschten Struktur schrieb. Die Regel Ich verwende ist:

RewriteEngine On # Turn on Rewriting Engine 

RewriteRule ^candidate-speech/([A-Za-z0-9-]+)/?$ candidate-speech.php?name=$1 

Wenn ich direkt das gewünschte URL laden (http://www.domain.com/elections/candidate-speech.php?name=candidate-name) mit dem Namen des Kandidaten, ich die Seite bekommen, wie beabsichtigt angezeigt. Wenn ich versuche, die verkürzte Version zu verwenden, bekomme ich jedoch die richtige Seite, aber nichts ist in $_GET zur Verfügung gestellt.

Die .htaccess-Datei wird im Wahlverzeichnis gespeichert, ebenso wie die entsprechende .php-Datei, die dieselbe Konfiguration ist, die ich in der Vergangenheit verwendet habe, wo diese Regel erfolgreich war. Ich bin relativ neu bei htaccess, weshalb ich auf meinen bisherigen Erfolg zurückgehe. Ich habe den Server neu gestartet, meinen Cache gelöscht, et al. umsonst. Was könnte ich falsch machen?

+0

Gibt es noch andere Regeln in 'Wahl/.htaccess'? Sie sollten ein '[L]' - Flag am Ende der 'candidate-rede.php'-Regel hinzufügen (die ansonsten korrekt aussieht). Einige Browser sind sehr aggressiv, Redirects zwischenzuspeichern, obwohl sie gelöscht wurden. Ich würde das auch in einem anderen Browser oder einem privaten Browserfenster ausprobieren. –

+1

Und wenn Sie es nicht schon getan haben, stellen Sie sicher, dass Sie 'var_dump ($ _ GET);' darin finden, um genau zu überprüfen, was (oder tatsächlich überhaupt) in '$ _GET' steht. –

+0

Ich habe die var_dump auf $ _GET zuerst, wenn die Seite alle Platzhalterinformationen ausgegeben. Die einzige andere Regel ist ein Duplikat der Posted-Regel, die aber Kandidaten-Sprache-wk anstelle von Kandidaten-Sprache für die Eingabe- und Ausgabe-URLs verwendet (Ich möchte gerne eine Arbeitsdatei haben, wenn etwas schief läuft) Leben) –

Antwort

1

es haben auf diese Weise:

Options -MultiViews 
RewriteEngine On 
RewriteBase /elections/ 

RewriteRule ^candidate-speech/([\w-]+)/?$ candidate-speech.php?name=$1 [L,QSA,NC] 

MultiViews Option deaktivieren, ist hier wichtig, da Ihre .php Dateinamen candidate-speech/ gleich der Ausgangskomponente ist.

Option MultiViews (siehe http://httpd.apache.org/docs/2.4/content-negotiation.html) durch Apache's content negotiation module verwendet, die vor läuft mod_rewrite und macht Apache-Server Spiel Erweiterungen von Dateien. Wenn also die URL /file ist, wird Apache /file.html liefern.