2009-04-25 3 views
1

Ich versuche, Seiten mit mod_rewrite auf die Seiten mit einigen Variablen umzuleiten (für die Verwendung mit PHP $_GET).Mod Rewrite und PHP

Um ein Beispiel mit wenigen Zeilen geben:

  • Wenn der Benutzer /c/stg geht es Umleitungen an item_show.php?id=$1&f=1 (wo f Seitenzahl ist).
  • Wenn der Benutzer /c/stg/2 eingibt, wird auf die zweite Seite mit show.php?id=$1&f=$2 umgeleitet.

Ich denke, es gibt keine Fehler oder Missbrauch von diesen in meiner Datei, aber hier ist es, was ich will:

ich Benutzer will /string direkt item_show.php?id=$1&f=1 mit $1 zu gehen, geben unsere String natürlich ...

Aber wenn ich meine Datei ändere, indem ich den /c/ Teil von RewriteRule lösche, fängt es an, Fehler in allen anderen Verzeichnissen zu geben und liest keine Akten (my.css) obwohl ich bereits eine RewriteCond %{REQUEST_FILENAME} !-f ... definiert habe ...

Haben Sie Vorschläge? Oder wie kann ich dieses System mit jeder Methode möglich machen?

Options FollowSymLinks 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

#user 
RewriteRule ^u/([^/]+)/?$ profile.php?username=$1 [L,NC] 

#marked 
RewriteRule ^marked/([^/]+)/?$ item_marked.php?id=$1 [L,NC] 

#content 
RewriteRule ^c/([^/]+)/?$ item_show.php?id=$1&f=1 [L,NC] 
RewriteRule ^c/([^/]+)/([^/]+)/?$ item_show.php?id=$1&f=$2 [L,NC] 
+0

Erster Vorschlag: poste den Inhalt der Datei mit diesen Regeln in ihm. Und ist es die Hauptserverkonfiguration oder eine .htaccess-Datei? –

+0

Aktuelle .htaccess-Datei ist hier:! Optionen FollowSymLinks RewriteEngine On RewriteCond% {REQUEST_FILENAME} -f RewriteCond% {REQUEST_FILENAME} -d #user RewriteRule^u/([^ /] +) /? $ profile.php? username = $ 1 [L, NC] #marked RewriteRule^markiert/([^ /] +) /? $ item_marked.php? id = $ 1 [L, NC] #content RewriteRule^c/([^ /] +) /? $ Item_show.php?id = $ 1 & f = 1 [L, NC] RewriteRule^c/([^ /] +)/([^ /] +)/$ $ item_show.php? id = $ 1 & f = $ 2 [L, NC] – jnbn

+0

Entfernen der c/bedeutet alle URLs entsprechen Ihrem Muster ... das ist, was Sie meinten, rechts: > RewriteRule^([^ /] +) /? $ –

Antwort

1

Bin ich falsch, wenn RewriteCond nur an die erste RewriteRule weitergegeben wird ??

Versuchen Sie stattdessen:

Options FollowSymLinks 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

#user 
RewriteRule ^u/([^/]+)/?$ profile.php?username=$1 [L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
#marked 
RewriteRule ^marked/([^/]+)/?$ item_marked.php?id=$1 [L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
#content 
RewriteRule ^c/([^/]+)/?$ item_show.php?id=$1&f=1 [L,NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+)/?$ item_show.php?id=$1&f=$2 [L,NC] 

Cheers,

+0

Ich habe es schon heute herausgefunden, aber danke Josso :) – jnbn

+0

Ich bin nur froh, dass ich einen Punkt bekommen habe, damit ich abstimmen kann. : p Viele der Fragen hier sind ziemlich außerhalb meines Wissens. :( – johankj

1

RewriteCond Richtlinien gehören nur auf die erste folgenden RewriteRule Richtlinie. In Ihrem Fall werden die beiden Direktiven nur auf die erste RewriteRule Direktive angewendet und nicht auf die anderen.

Aber man könnte diese Abtreibung Regel verwenden, um die Neuschreibprozesses zu beenden, wenn die Anforderung an eine vorhandene Datei oder ein Verzeichnis zugeordnet werden:

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

Dies würde dazu führen, dass folgende Regeln nur getestet werden, wenn der Antrag nicht sein kann direkt einer vorhandenen Datei oder einem Verzeichnis zugeordnet werden.