Ausblenden von URL-key-Parameter mit .htaccess
Ich habe gesucht alle über das Internet und noch keine Lösung für dieses Problem. Ich bin der Hoffnung, Sie könnten etwas Licht auf die situation.
Habe ich meine index-Datei wie folgt eingerichtet:
<header></header>
<div id="main">
<?php
if(isset($_GET["p"])) $p = $_GET["p"];
else $p = "home";
if(file_exists("pages/{$p}.php")) include("pages/{$p}.php");
?>
</div>
macht mir laden meine Seiten mit einem ?p=contact
href.
Sagen, ich möchte die Anzeige eines Benutzer-Profil. Ich würde dann erstellen Sie einen Unterordner in " meine "Seiten" - Ordner, so dass der relative Pfad pages/users/profile.php
somit href ?p=users/profile&uid=5
. Aber damit bleibt eine hässliche URL (sowie SEO-rating).
Wie würde ich umschreiben, dass die URL zu sehen wie /users/profile/5
?
EDIT:
Ich habe versucht, die folgenden, was in der HTTP 500:
RewriteRule ^([^/]*)/([^/]*)$ /?p=$1&uid=$2 [L]
EDIT: Meine .htaccess-Datei liegt direkt im root-Ordner: http://pastie.org/2268239
Linie 338 ist, wo ich will, um dies zu erreichen (derzeit nur ein Kommentar).
- Was die Apache-error log sagt zu Fehler 500 Grund?
- Request exceeded the limit of 10 internal redirects aufgrund der zu erwartenden Konfigurations-Fehler.
- Das bedeutet, dass die Regel (und wenn es nur ein hier; wenn mehr-dann ist Ihre Kombination) erzeugt unendliche rewrite-Zyklus, der Apache hat, gewaltsam zu brechen. Haben Sie auf Bedingung hinzufügen, dass eine Unterbrechung Zyklus (z.B. hinzufügen
RewriteCond %{REQUEST_FILENAME} !-f
vor die Regel-aber das ist nur eine wilde Vermutung, da ich nicht weiß, alle details). Wenn dies nicht hilft-dann empfehle ich dringend aktivieren der rewrite-debugging (RewriteLogLevel 9
) und check-rewrite-log, um zu sehen, welche Regel, die es verursacht. Ansonsten bieten viel mehr details (Ihre aktuelle htaccess, wo es liegt etc). - Die .htaccess-Datei wird bereitgestellt von HTML5 Boilerplate mit meinem Zusatz zwischen den Zeilen 330-340. Aktualisiert die post mit pastie link.
- Froh, dass du es gelöst hast. Bitte posten Sie Ihre Lösung als Antwort (und akzeptieren Sie es später), so dass andere Leute verweisen kann, um es (viel besser, die Frage mit nicht akzeptierten Antworten und mit zu Lesen, ganze Seite, um zu sehen, ob es gelöst wurde oder nicht). Thnx 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfachste Antwort für beide Situationen würde es sein, fügen Sie diese in Ihre .htaccess-Datei
Dieser leitet den gesamten Verkehr auf Ihrer domain zu Ihrem index.php Datei.
Könnten Sie dann bestimmen, was zu tun ist in Ihrem Skript unter Verwendung des uri, der in $_SERVER["REQUEST_URI"]
Ich den gewünschten Effekt erzielt, indem durch das hinzufügen der folgenden drei Zeilen:
Diese ermöglicht mir den Zugang
/contact
,/users/index
und/users/profile/5
.Ich bin kein php-Mann, aber ich versuchte dies mit meinem schreiben.
In diesem Fall, für die
p
parameter, die Sie suchen alle chars bis auf den letzten Schrägstrich, so ist der erste Teil dieses etwas nimmt, sonst läuft es halt in der ersten Schrägstrich (users statt Benutzer/Profil).Dann sieht es für ein Schrägstrich und halten Sie (nicht-slash). Die
(.+)
wird gierig sein, so wird es gehen bis zu dem letzten Schrägstrich vor dem Ende.Dann fiel mir der Letzte Teil nicht zu vermeiden sind Schrägstriche. Da der erste Teil ist gierig, die explizite
/
Schrägstrich ist das Letzte slash. So ist es noch einfacher:Ich mag die
.+
zu verlangen, etwas, zumindest beim ersten herauszufinden diese aus. Wenn Sie später wissen, dass Sie optional sein können, die Sie tun können.*
, aber in der Regel, die endet als eine andere Seite oder eine andere Regel.Diese Regeln erwarten, dass alle urls in diesem format, das ist, was Sie gefragt haben. Aber vielleicht ist es ein wenig zu grabby, so könnte es ausschließen von urls, die wirklich eine .htm-oder .php oder was auch immer.
Diese sucht, alles bis zum letzten Schrägstrich, dann ist alles ohne ein Punkt drin. Wenn es einen dot hat, diese nicht anzuwenden. Also, wenn es eine "normale" url, wird diese verlassen Sie allein. Dies könnte helfen, mit dem 404 problem, in dem Fall die 404-Seite wird ein einklemmen durch diese.
[L]
letzten Regeln nicht leitet. Auch, wenn Sie testen, probieren verschiedene urls, z.B., erhöht die Zahl am Ende - ich habe Probleme mit google chrome, wo es Zwischenspeicherung meinem vorherigen redirect/rewrite und nicht immer neue.