mod_rewrite
fritz85
- php
0 dedlfix
0 sebastian19920 Bob
Guten Morgen,
ich habe ein .htaccess File erstellt mit einer RewriteRule:
---------
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^tmp_(.*)_(.*)_(.*).htm$ /index.php?see=$1&category=$2&save=$3 [L]
---------
Das funktioniert auch wunderbar.... Jedoch falls ich nun einen folgenden Link habe: /index.php?see=$1&category=$2&save=$3&right=$4&profile=$5
Dann funktioniert es nicht mehr - Irgendwie kann ich nicht folgendes angeben:
---------
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^tmp_(.*)_(.*)_(.*).htm$ /index.php?see=$1&category=$2&save=$3 [L]
RewriteRule ^tmp_(.*)_(.*)_(.*)_(.*)_(.*).htm$ /index.php?see=$1&category=$2&save=$3&right=$4&profile=$5 [L]
geschweige denn:
RewriteRule ^tmp2_(.*)_(.*)_(.*)_(.*)_(.*).htm$ /index.php?see=$1&category=$2&save=$3&right=$4&profile=$5 [L]
---------
Kann mir da jemand helfen?
Gruss
fritz
echo $begrüßung;
Dann funktioniert es nicht mehr
"Funktioniert nicht" funktioniert nicht. Wie sieht "funktioniert nicht" konkret bei dir aus? Bekommst du eine falsche Umschreibung, gar keine, eine Fehlermeldung oder ganz was anderes?
Das RewriteLog gibt dir detailliert Auskunft, was intern vorgegangen ist. Um es zu aktivieren benötigst du aber administrativen Zugang zum Server.
echo "$verabschiedung $name";
hello
"Funktioniert nicht" funktioniert nicht. Wie sieht "funktioniert nicht" konkret bei dir aus? Bekommst du eine falsche Umschreibung, gar keine, eine Fehlermeldung oder ganz was anderes?
Not Found
The requested document was not found on this server.
Das RewriteLog gibt dir detailliert Auskunft, was intern vorgegangen ist. Um es zu aktivieren benötigst du aber administrativen Zugang zum Server.
Ja das hab ich momentan ned.
Das einte funktioniert aber das andere nicht. Das heisst er greifft zuerst auf die erste Regel und dort fehlen Parameter (zweites Beispiel) also wird es nicht gefunden.
echo $begrüßung;
Not Found
The requested document was not found on this server.
Das bedeutet entweder, dass die Umschreibung ein Ergebnis geliefert hat, das nicht vorhanden ist, was unwahrscheinlich ist, wenn du index.php nicht gelöscht hast, oder, dass es keine RewriteRule gab, die gepasst hat.
Das einte funktioniert aber das andere nicht. Das heisst er greifft zuerst auf die erste Regel und dort fehlen Parameter (zweites Beispiel) also wird es nicht gefunden.
Du müsstest nun noch mitteilen, welche URL du aufrufst (zumindest den Teil hinterm Hostnamen). Dann kann man das vielleicht nachvollziehen.
Du könntest dir auch einen Server selbst aufsetzen, die Situation nachstellen und mit dem RewriteLog Erfahrung sammeln. Ein Apache allein reicht schon, PHP benötigst du dazu nicht unbedingt. Gut wäre es, wenn du die gleiche Version wie beim Problemkind verwendest. Zwischen Apache 1.3 und 2.x gibt es nämlich Unterschiede im mod_rewrite-Verhalten.
echo "$verabschiedung $name";
Gehört wohl eher zum Themenbereich Server
Deine RegEx ist zu weit. .* passt auf 0 bis n beliebige Zeichen. Soll das so sein, oder soll diese nur auf all das passen, was eben keinen Unterstrich enthält?
RewriteRule ^tmp_([^_]+)_([^_]+)_([^_]+).htm$ /index.php?see=$1&category=$2&save=$3 [L]
RewriteRule ^tmp_([^_]+)_([^_]+)_([^_]+)_([^_]+)_([^_]+).htm$ /index.php?see=$1&category=$2&save=$3&right=$4&profile=$5 [L]
Natürlich könntest du das RegEx-„Problem“ umgehen, indem du dir Regeln umdrehst, das ändert aber nichts daran, dass deine RegEx zu weit gefasst ist. Soll ein Punkt ein Punkt sein, so muss er per Backslash escaped werden, ansonsten bedeutet er 'ein beliebiges Zeichen'.
Manchmal ist es auch sinnvoller den Request per
RewriteRule ^tmp_ /index.php [L]
auf das PHP-Script zu lenken und dort $_SERVER['REQUEST_URI'] splitten und umfassend auszuwerten (d.h. auch auf erlaubte Werte prüfen).