php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 5 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 16-08-2007, 11:56
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard mod_rewrite: GET-Parameter komplett abändern

Hi Leute
Habe die letzten Stunden hier im Forum und im Netz nach einer Antwort gesucht, aber ich bin leider nicht wirklich fündig geworden!
Ich würde gerne alle meine URL-Query, also alle GET-Parameter umschreiben. Das ganze soll nach folgendem Schema geschehen:
Code:
http://www.irgendwo.de/path/to/file.php?id=2&var=bla&foo=bar
soll umgeschrieben werden in
Code:
http://www.irgendwo.de/path/to/file.php/id-2/var-bla/foo-bar/
bzw. wenn ich den zweiten Link aufrufe, soll dies ein Alias zu dem ersten Link sein.

Jetzt ist aber nicht sichergestellt, das diese Parameter auch in dieser Reihenfolge oder überhaupt auftreten. Außerdem soll das Rewrite auf jede URL angewendet werden, muss also sehr allgemein gehalten werden. Für einzelne Parameter ist die Lösung ja nicht schwer, doch weiß ich nicht, wie ich bei einer unbekannten Anzahl von Parametern vorgehen soll.

Im Moment habe ich folgenden Schnipsel in der Config:
Code:
# 4 Parameter
RewriteRule ^/(.*).php/(.*)-(.*)/(.*)-(.*)/(.*)-(.*)/(.*)-(.*)/$ /$1.php?$2=$3&$4=$5&$6=$7&$8=$9
# 3 Parameter
RewriteRule ^/(.*).php/(.*)-(.*)/(.*)-(.*)/(.*)-(.*)/$ /$1.php?$2=$3&$4=$5&$6=$7
# 2 Parameter
RewriteRule ^/(.*).php/(.*)-(.*)/(.*)-(.*)/$ /$1.php?$2=$3&$4=$5
# 1 Parameter
RewriteRule ^/(.*).php/(.*)-(.*)/$ /$1.php?$2=$3
Leider hört es jetzt bei 4 Parametern schon auf, da es nur 9 Regex-Variablen gibt. Gibt es nicht eine Art Schleife oder ein Flag, mit der ich alle Parameter entsprechend ändern könnte? Oder das ich mehrere einzelne Regeln nacheinander auf die URL anwende, so dass in jeder Regel einige Parameter ersetzt werden?

Ich bin momentan etwas Ratlos und für jeden Gedankenanstoß und jedes Stichwort dankbar!
Mit Zitat antworten
  #2 (permalink)  
Alt 16-08-2007, 12:25
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Tjo... also ich würde das über Pathinfo lösen~
Mit Zitat antworten
  #3 (permalink)  
Alt 16-08-2007, 14:01
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

oh ja, slashes sind so viel ästhetischer als ampersands und die minus-zeichen sind geradezu puristisch gegenüber diesen überbewerteten gleichheitszeichen..

p.s. meine augen tränen, wenn ich die url in diesem forum sehe. deine auch?
Mit Zitat antworten
  #4 (permalink)  
Alt 16-08-2007, 14:14
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von penizillin
oh ja, slashes sind so viel ästhetischer als ampersands und die minus-zeichen sind geradezu puristisch gegenüber diesen überbewerteten gleichheitszeichen..

p.s. meine augen tränen, wenn ich die url in diesem forum sehe. deine auch?
Es geht mir hier um keinerlei Ästhetik sondern um meine URLs Suchmaschinen fähig zu machen. Da die Queries in der URL ja meist nicht mitgespeichert werden, ist das natürlich etwas unschön, da ja erst durch die GET-Parameter die korrekte Seite identifiziert werden kann. Aber das ist ja nichts neues was ich hier vorhabe!
Meinetwegen können es statt den Minuszeichen auch irgendwelche anderen Zeichen sein, die ich auf ein Gleichheitszeichen ändern kann, ein Komma zum Beispiel. Wichtig ist eher, dass die URLs anschließend wie Pfade zu Verzeichnissen aussehen, damit diese korrekt indiziert werden.


Zitat:
Tjo... also ich würde das über Pathinfo lösen~
Ich gehe mal davon aus, du meinst AcceptPathInfo von Apache
Ich kann das jetzt gerade nicht testen, aber ich denke, damit könnte ich mein Problem lösen. Gehe ich richtig in der Annahme, das ich im Skript dann noch die GET-Parameter aus der entsprechenden $_SERVER-Variable extrahieren muss, ähnlich wie ich es mit meiner Regex mache?
Mit Zitat antworten
  #5 (permalink)  
Alt 16-08-2007, 14:17
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Es geht mir hier um keinerlei Ästhetik sondern um meine URLs Suchmaschinen fähig zu machen.
kannst du mir erklären, was an "normalen" urls nicht "Suchmaschinen fähig" ist? am besten ohne formulieren wie "aber in einem forum habe ich gelesen, dass..."

Zitat:
Da die Queries in der URL ja meist nicht mitgespeichert werden...
und auch diese einsichten in die funktionsweise moderner suchmaschinen würde ich gern belegt sehen.
Mit Zitat antworten
  #6 (permalink)  
Alt 16-08-2007, 14:23
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von penizillin
kannst du mir erklären, was an "normalen" urls nicht "Suchmaschinen fähig" ist? am besten ohne formulieren wie "aber in einem forum habe ich gelesen, dass..."

und auch diese einsichten in die funktionsweise moderner suchmaschinen würde ich gern belegt sehen.
Kann ich dir nicht erklären und auch nicht belegen! Wenn du mir sagst, die GET-Parameter werden auch mit erfasst, dann glaube ich es dir gerne.
Ich habe aber ehrlich gesagt keine Lust, mich mit dir um für und wider zu streiten, sondern würde gerne eure Hilfe in Anspruch nehmen. ghostgambler hat mir auf jeden Fall schon mal einen guten Tipp gegeben, dem ich nachgehen werde! Wenn du mir auch noch einen Tipp geben kannst, ich bin für jede Idee und Hilfe dankbar
Mit Zitat antworten
  #7 (permalink)  
Alt 16-08-2007, 14:28
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von PHP-Desaster
Gehe ich richtig in der Annahme, das ich im Skript dann noch die GET-Parameter aus der entsprechenden $_SERVER-Variable extrahieren muss, ähnlich wie ich es mit meiner Regex mache?
Ja - in deinem Fall würde ein
PHP-Code:
$vars explode('/'$_SERVER['PATH_INFO']);
foreach (
$vars as $var) {
  
$pos strpos($var'-');
  
$_GET[substr($var0$pos)] = substr($var$pos+1);
}
unset(
$vars$var$pos); 
wohl das gewünschte bringen
Mit Zitat antworten
  #8 (permalink)  
Alt 16-08-2007, 14:31
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

http://googlewebmastercentral.blogsp...uidelines.html

ein genereller einwand meinerseits: wenn du mehr als 3-5 parameter in der url brauchst, hast du irgendwas schlecht konzipiert. überdenke den ansatz - was davon kann in eine session ausgelagert werden? was davon deutet auf schlechten inhaltlichen aufbau der seite hin?
Mit Zitat antworten
  #9 (permalink)  
Alt 16-08-2007, 14:40
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Besten Dank ghostgambler, das könnte wohl meine Lösung sein.

@penizillin: Ich benutze im Moment so gut wie nirgendwo mehr als 1-2 Parameter. Allerdings hatte ich nicht vor, mich da in irgendeiner Form selbst einzuschränken. Da es außerdem um ein CMS geht, welches durch Module anderer Autoren erweitert werden kann, ist nicht sichergestellt, das nie mehr als 3-5 Parameter auftreten.
Meine eigene Lösung mit 4 Parametern ist also nicht ausreichend. Doch die Lösung über Pathinfo ist super, da im Grunde unendlich viele Parameter möglich sind.
Vielleicht kann ich sogar beides anbieten, je nachdem was die User auf ihrem Webspace konfigurieren dürfen!

Werde die Pathinfo-Lösung nachher mal zu Hause ausprobieren!
Mit Zitat antworten
  #10 (permalink)  
Alt 16-08-2007, 16:39
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Die Länge einer URL ist begrenzt.
Mit Zitat antworten
  #11 (permalink)  
Alt 16-08-2007, 19:36
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von ghostgambler
Die Länge einer URL ist begrenzt.
Ist sie nur theoretisch beschränkt oder technisch vom Server her? Ich hab auch vor einiger Zeit gelesen, dass die URL-Länge auf 255 Zeichen begrenzt ist, allerdings auch, das die heutigen Browser und Server keine Überprüfung der Länge vornehmen und auch mit längeren URLs arbeiten.
Mit Zitat antworten
  #12 (permalink)  
Alt 16-08-2007, 20:54
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Ich habe es jetzt zu Hause so gelöst, wie ghostgambler vorgeschlagen hat und funktioniert bestens! Wer auch Interesse an der Lösung hat:

Folgenden Codeschnipsel in die .htaccess im gewünschten Verzeichnis einfügen:
Code:
<Files *.php>
	Options +Includes
	SetOutputFilter INCLUDES
	AcceptPathInfo On
</Files>
Und in den PHP-Dateien (config-Datei oder was auch immer) fügt ihr folgenden Schnipsel ein (Danke ghostgambler )
PHP-Code:
$vars explode('/'$_SERVER['PATH_INFO']);
foreach ( 
$vars as $var ) {
    if( 
is_string$var ) and trim$var )!='' ) {
        
$pos strpos$var'-' );
        if( 
$pos===false or $pos<=) {
            
$_GET[] = str_replace'+'' '$var );
        }
        else {
            
$key str_replace'+'' 'substr$var0$pos ) );
            
$value str_replace'+'' 'substr$var$pos+) );
            
$_GET[$key] = $value;
        }
    }
}
unset( 
$vars$var$pos$key$value ); 
Jetzt können die GET-Parameter in einer verzeichnisähnlichen URL übergeben werden:
Code:
http://localhost/script.php/eins-1/zwei-2/drei-3/vier-4/fuenf-5/
Zusätzlich zu dieser Schreibweise können noch normale Parameter hinten angehängt werden!



--> Problem gelöst
Mit Zitat antworten
  #13 (permalink)  
Alt 16-08-2007, 21:04
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von PHP-Desaster
Ist sie nur theoretisch beschränkt oder technisch vom Server her? Ich hab auch vor einiger Zeit gelesen, dass die URL-Länge auf 255 Zeichen begrenzt ist, allerdings auch, das die heutigen Browser und Server keine Überprüfung der Länge vornehmen und auch mit längeren URLs arbeiten.
Also ich weiß was von 2000 Zeichen, aber was genau von dieser Grenze betroffen ist weiß ich nicht.

Zitat:
PHP-Code:
if( is_string$var 
Was sollte $var sonst sein?

Zitat:
PHP-Code:
$key str_replace'+'' 'substr$var0$pos ) ); 
Es gibt auch urldecode, was dann auch alle Zeichen richtig wandelt~
Mit Zitat antworten
  #14 (permalink)  
Alt 16-08-2007, 21:38
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Also ich weiß was von 2000 Zeichen, aber was genau von dieser Grenze betroffen ist weiß ich nicht.
Werde ich wohl nicht überschreiten, denke ich ^^


Zitat:
Was sollte $var sonst sein?
Ja, hast recht!

Zitat:
Es gibt auch urldecode, was dann auch alle Zeichen richtig wandelt~ [/B]
Jep, wusste ich ^^ Aber danke, werde ich austauschen (Es ist echt die falsche Zeit, nach einem 12-Stunden-Tag...)

Edit: Jetzt weiß ich, warum ich nur das + ersetzt habe! Die URL wird ja von PHP vorher ersetzt. Und doppelt escapen ist kaputt escapen

Geändert von PHP-Desaster (16-08-2007 um 21:53 Uhr)
Mit Zitat antworten
  #15 (permalink)  
Alt 16-08-2007, 22:05
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hm... jop hast recht
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:33 Uhr.