Zurück   Online Marketing Talk > Sonstiges > Stammtisch
Benutzername
Kennwort
Registrieren Hilfe Feed Kalender Suchen Heutige Beiträge Alle Foren als gelesen markieren

Stammtisch Hier wird über alles gesprochen ausser Online-Marketing.

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1  
Alt 12-05-2007, 02:28
onkelseo onkelseo is offline
Online Marketer
 
Registrierungsdatum: Dec 2005
Ort: Innsbruck/Tirol
Beiträge: 183
Standard Kleines Modrewrite ohne htaccess

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 .
Mit Zitat antworten
  #2  
Alt 12-05-2007, 11:25
jr-ewing jr-ewing is offline
Moderator
 
Registrierungsdatum: Nov 2005
Beiträge: 599
Standard

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...
Mit Zitat antworten
  #3  
Alt 12-05-2007, 14:47
dennis dennis is offline
Moderator
 
Registrierungsdatum: Nov 2005
Beiträge: 967
Standard

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
Mit Zitat antworten
Antwort


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge anzufügen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Gehe zu

Ähnliche Themen
Thema Erstellt von Forum Antworten Letzter Beitrag
Problem mit Domain mit www und ohne www Loewe Google 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


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


SEO by vBSEO