| |||||||
| Stammtisch Hier wird über alles gesprochen ausser Online-Marketing. |
![]() |
| | Themen-Optionen | Thema durchsuchen | Ansicht |
|
#1
| |||
| |||
| Ich hab mich heute mal kurz hingesetzt und für meine Heimseite eine art Modrewrite zusammengedoktert. Problem ist das meine Privatseite auf nem Uraltspace liegt bei dem "echtes" Modrewrite mit .htaccess ein Wunschgedanke ist. Meine Seite fußt auf dem banalen Prinzip das bisher nach dem klicken eines Links ein Parameter übergeben wurde, dann mit get genommen und dann entsprechend ein Text angezeigt wird. Diesen Aufruf wollte ich nun nicht mehr mit Parametern machen, sondern ein Mod rewrite "faken". Ich stell das hier mal ein, vielleicht hilfts dem einen oder anderen von euch bei irgendwas. Was kann das Ding? Nicht sonderlich viel Man hat eine einfache kleine php Seite und üblicherweiße sieht da der Aufbau wie folgt aus: index.php?menu=irgendwas (oder so ähnlich) Ergebnis im umgebauten Format: index.php/irgendwas Natürlich gibts schon 3000 verschiedene Lösungsansätze da draußen (die allesamt ausgereifter sind), mir gehts dabei meistens aber so das ich länger brauch zu verstehen wie ein fremdes Skript funktioniert als ein eigenes zu schreiben. Man sollte sich daran auch nur versuchen wenn die Seite eine überschaubare Größe hat und es kein fertiges System ala Mambo etc. ist (zumals da ja auch schon fast alles als Plugin gibt). Der Code ist eher was für die kleine selbst zusammengezimmerte Seite bei der man ziemlich genau weiß wie der restliche Code funkioniert und zusammenwirkt da doch einige manuelle Eingriffe notwendig sind. Bei einem Hochkomplexen System wo man sich nicht wirklich damit auskennt würde das ganz übel ausarten ![]() Eine momentane Einschränkung ist auch noch das es nur mit einem Parameter funktioniert, es ließe sich aber recht einfach auf mehrere Parameter erweitern. Hier ist es also: Erstmal eine Funktion die die Seitenurl auslesen kann: function serverpl_onsite(){ $_SERVER['FULL_URL'] = 'http'; $script_name = ''; if(isset($_SERVER['REQUEST_URI'])) { $script_name = $_SERVER['REQUEST_URI']; } else { $script_name = $_SERVER['PHP_SELF']; if($_SERVER['QUERY_STRING']>' ') { $script_name .= '?'.$_SERVER['QUERY_STRING']; } } if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') { $_SERVER['FULL_URL'] .= 's'; } $_SERVER['FULL_URL'] .= '://'; if($_SERVER['SERVER_PORT']!='80') { $_SERVER['FULL_URL'] .= $_SERVER['HTTP_HOST'].':'.$_SERVER['SERVER_PORT'].$script_name; } else { $_SERVER['FULL_URL'] .= $_SERVER['HTTP_HOST'].$script_name; } return true; } Der Funktionsaufruf: serverpl_onsite(); Dann: $site_full_url = $_SERVER['FULL_URL']; Das Standardfile definieren, bei einer kleinen phpseite meistens index.php $site_base_file="index.php"; Das Skript sucht nun in der URL das File: $site_pos = strpos($site_full_url,$site_base_file,1); Wenn das File gefunden wurde (also man nicht mehr die reine TLD da stehen hat) if($site_pos>"") { überspringen wir den Standardfilepart und schauen was hinten dran so kommt, mit dem also eine Aktion ausgelöst wird (was bisher der Parameter war), wenn bei euch ein anderes file als index.php das Standardfile ist, dann die Buchstaben zählen und entsprechend die +10 anpassen. $site_start_pos=$site_pos+10; Den Teil separieren: $site_text_count = substr($site_full_url, $site_start_pos); den Inhalt zählen $site_final_count = strlen($site_text_count); $site_final_text = substr($site_full_url, $site_start_pos, $site_final_count); } else Ansonsten wenn kein file gefunden wurde, man also index.php oder whatever noch nicht in der URL hat. { $site_final_count=""; Das ist ein Teil den ich vor allem für meine eigene Seite brauch, sprich wenn noch nix aufgerufen wurde wird damit der Standardeingangstext geholt. $site_final_text="index"; } Der Teil ist nun dafür zuständig das der Aufruf von Grafiken etc. noch funktioniert, auch wenn wir "Verzeichnisse" simulieren. Ansonsten passt (zumindest bei meiner Seite) der Aufruf von Grafiken etc... nicht mehr,da wir uns ja nach anklicken eines Menüs eine "Ebene" zu tief aufhalten. . Solange wir uns noch in den normalen ebenen befinden soll alles bleiben wie gehabt: if($site_final_count=="0" or $site_final_count=="" ) { $site_dir=""; } Wenn ein Menüpunkt geklickt wurde dann müssen wir wieder eine "Ebene" höher else { $site_dir="../"; } Was muss man nun noch machen? Anstelle das man Links wie bisher mit index.php?menu=sowieso aufruft müssen die Seitenlinks der ersten Ebene (Hauptmenüpunkte) folgend geändert werden: index.php/sowieso In der zweiten Ebene (also Submenüpunkte die unter Hauptpunkten liegen) sowieso (sonst nix) Warum das? Sogesehen simuliert man Verzeichnisse, ergo mit jedem Klick auf einen Link wurde einmal mehr index.php/index.php/usw. dastehen, da man "tiefer" in die gefakten Verzeichnisse einsteigen würde - das kann nicht funktionieren. Könnte man natürlich mittels Skript wieder abfangen aber ich habs nicht gebraucht. Weiters muss man vor jedes Image und jeden Link bzw jeden anderen irgendwie Webspaceintern gearteten Verweiß der nicht absolut ist folgenden Schippsel setzen: <?php echo $site_dir ?> oder wenn der Aufruf schon von Innerhalb einer php Passage erfolgt eben $site_dir In der Variablen $site_final_text hat man übrigens den Menüpunkt drinnen der geklickt wurde, ab hier sollte die Site gleich laufen wie bisher - im Prinzip hat man mittels obigen Codestücken nur das erledigt was eigentlich ansosnten $_GET so erledigt. Bei meiner Seite erfolgte der bisherige Aufruf von Webseiten mittels index.php?menu=sowieso Um Besucher nicht zu verwirren die über alte Links kommen die noch Paramter haben habe ich nun noch folgende Passage Wenn erkannt wird das mit $_GET was kommt if ($_GET['menu']>"") { entsprechend verarbeiten und $site_final_text setzen $get_vars['menu'] = $_GET['menu']; $site_final_text=$get_vars['menu']; if($get_vars['menu']=="") { $site_final_text="index"; } } Hier noch mal der ganze ode zusammenhängend: function serverpl_onsite(){ $_SERVER['FULL_URL'] = 'http'; $script_name = ''; if(isset($_SERVER['REQUEST_URI'])) { $script_name = $_SERVER['REQUEST_URI']; } else { $script_name = $_SERVER['PHP_SELF']; if($_SERVER['QUERY_STRING']>' ') { $script_name .= '?'.$_SERVER['QUERY_STRING']; } } if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') { $_SERVER['FULL_URL'] .= 's'; } $_SERVER['FULL_URL'] .= '://'; if($_SERVER['SERVER_PORT']!='80') { $_SERVER['FULL_URL'] .= $_SERVER['HTTP_HOST'].':'.$_SERVER['SERVER_PORT'].$script_name; } else { $_SERVER['FULL_URL'] .= $_SERVER['HTTP_HOST'].$script_name; } return true; } serverpl_onsite(); $site_full_url = $_SERVER['FULL_URL']; $site_base_file="index.php"; $site_pos = strpos($site_full_url,$site_base_file,1); // echo $site_pos; if($site_pos>"") { $site_start_pos=$site_pos+10; $site_text_count = substr($site_full_url, $site_start_pos); $site_final_count = strlen($site_text_count); $site_final_text = substr($site_full_url, $site_start_pos, $site_final_count); // echo " ".$site_final_count." ".$site_final_text ; } else { $site_final_count=""; $site_final_text="index"; } if($site_final_count=="0" or $site_final_count=="" ) { $site_dir=""; } else { $site_dir="../"; } if ($_GET['menu']>"") { $get_vars['menu'] = $_GET['menu']; $site_final_text=$get_vars['menu']; if($get_vars['menu']=="") { $site_final_text="index"; } } Es ist alles wie gesagt noch sehr hässlich zusammengemurkst aber vielleicht hilfts den einen oder anderen oder gibt ein paar Ansätze für Ideen etc. Wenn jemand gerne weiter daran herumbasteln will mach ich gerne mit . |
|
#2
| |||
| |||
| das ist echt ne nette Lösung. Gerade für Webspace wo überhaupt kein ModRewrite verfügbar ist. Erstmal danke für den Quellcode und ich werde das mal bei Gelegenheit testen.... muss mir das aber auch nochmal durchlesen weil alles hab ich jetzt auf Anhieb noch nicht kapiert... |
|
#3
| |||
| |||
| Hi, in Anbetracht dessen, dass es Wochenende ist und die Uhrzeit zu der du gepostet hast ausserhalb der Geschäftszeiten liegt hier ein Rat von mir: Nimm weniger ;-) Nein, im Ernst - finde ich gut, dass du dir so eine Arbeit machst und es dann auch noch zur Verfügung stellst! Gruß, dennis |
![]() |
| Themen-Optionen | Thema durchsuchen |
| Ansicht | |
|
|
Ähnliche Themen | ||||
| Thema | Erstellt von | Forum | Antworten | Letzter Beitrag |
| Problem mit Domain mit www und ohne www | Loewe | 14 | 17-08-2007 15:01 | |
| [B] Kleines Kreditprojekt mit Einnahmen | AxelF | Domain- und Projekt-Verkäufe | 2 | 02-04-2007 15:27 |
| htaccess datei optimieren | Wildkater | Suchmaschinenoptimierung allgemein | 3 | 27-10-2006 00:59 |
| Sperrung ohne Grund?? | IAP2 | Google AdSense | 3 | 16-05-2006 11:28 |
| Leben ohne Google? | dennis | Stammtisch | 10 | 28-02-2006 11:46 |