rewrite-mod...

Alles, was den Apache betrifft, kann hier besprochen werden.

rewrite-mod...

Postby rabby » 08. February 2004 10:44

hallo welt!

da google leider nicht meine seite selfwap.de.sr indiziert, bzw nicht den content, der durch dynamische php seiten aufgerufen wird, durchsucht,
denk ich mal, dass es wohl gut wäre, den rewrite mod trick anzuwenden.
weiß bloß nicht wie das gehn soll :-(
und noch weniger weiß ich, wie es gehn soll, wenn ich keinen zugriff auf die konfigurationsdateien des apaches hab, da das bei meinem tarif bei levanzo nicht dazugehört...

was für möglichkeiten hab ich ?

danke für Eure hilfe
rabby
 
Posts: 28
Joined: 15. December 2003 17:39

Postby Stefan » 08. February 2004 14:27

Morsche,

hier mal das Standardbeispiel:

#### .htaccess ####

RewriteEngine On
RewriteRule kategorie_(.*).html$ mitte.php?cat=$1

########

Die zwei Zeilen speicherst Du als ".htaccess" und kopiers diese in Dein
Webspace Verzeichniss.
Vergiss nicht eine evtl. bereits vorhandene .htaccess Datei vorher runterzuladen und um diese Einträge zu erweitern, falls vorhanden.

Fortan werden Aufrufe im Muster:
http://www.cashers.de/wap-welt/selfwap/kategorie_6.html
umgeschrieben nach:
http://www.cashers.de/wap-welt/selfwap/mitte.php?cat=6


beste Grüße
Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby rabby » 08. February 2004 14:35

hallo !

leider hat der provider die rewrite engine aus :-(
desweiteren sollte es doch genau andersrum sein, sodass die ?cat=6 als _cat_6 dargestellt werden...
rabby
 
Posts: 28
Joined: 15. December 2003 17:39

Postby Stefan » 08. February 2004 15:20

Servus,

das verstehe ich nicht, Du willlst doch, das die URL ausieht, als würde eine normale html Datei aufgerufen. Das "datei_1.html" aufgerufen, aber in wirklichkeit "datei.php?cat=1" geliefert wird? Oder nicht?

genau dies tut die Regel.


beste Grüße
Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby rabby » 08. February 2004 15:29

ja, so is es...
aber die beschreibung hört sich bei mir wie das gegenteil an:
rabby
 
Posts: 28
Joined: 15. December 2003 17:39

Postby Stefan » 11. February 2004 11:12

Grüß Dich,

versuch es mal damit:

Code: Select all
<?PHP

// Entferne aus "getenv('PATH_INFO')" den letzten slash falls vorhanden,
$pfad = eregi_replace("/$","",substr(getenv('PATH_INFO'), 1));

// Zerlegen der Zeichenkette anhand des "/"
$vars = explode('/',$pfad);

// einlesen der Variablen in das $_GET Array
for ($i=0;$i<count($vars); $i++):
  $_GET[$vars[$i]] = $vars[$i+1];
  $i++;
endfor;

// Zeig Dich!
while (list($key, $value) = each($_GET))
  echo 'Inhalt von $_GET['. $key .'] = '.$value.'<br>';

// Im weiteren Verlauf des Sripts kannst Du wie gewohnt auf
// das $_GET Array zugreifen.
// z.B echo $_GET['cat']
?>



Aus
http://www.cashers.de/wap-welt/selfwap/mitte.php/cat/6

wird
http://www.cashers.de/wap-welt/selfwap/mitte.php?cat=6

$_GET['cat'] = '6';

Du kannst es natürlich beliebig erweitern.

z.B mittte.php/cat/6/id/3/dies/das
ergibt das gleiche wie mitte.php?cat=6&id=3&dies=das

beste Grüße
Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby rabby » 11. February 2004 16:02

ok, hab grad versucht, ne function dafür zu schreiben, die dann die ausgabe nochmal überarbeitet, sodass die links dann richtig geschrieben werden.
hierfür bräucht ich nochmal Deine hilfe.
das mit ausgabe (in/output) klappt, aber die änderung der links klappen nicht so recht.

wie würdest Du mittels php bei so nem text die urls "richtig" ändern?:
...<...a...href='test.php?cat=2&item=3' ...>...
...<...a...href="test.php?cat=2&item=3&" ...>...
?

danke
rabby
 
Posts: 28
Joined: 15. December 2003 17:39

Postby Stefan » 11. February 2004 17:06

Grüß Dich,

rabby wrote:wie würdest Du mittels php bei so nem text die urls "richtig" ändern?:
...<...a...href='test.php?cat=2&item=3' ...>...
...<...a...href="test.php?cat=2&item=3&" ...>...


Sorry, aber ich weiss nicht genau was Du meinst.

Also nochmal,

Du setzt Links in Form von "test.php/cat/6/id/3".

Das Script zerlegt diesen String und fügt die Werte ins "$_Get" Array.
Damit Du wie gewohnt darauf zugreifen kannst.

include($_GET['cat'].".inc.php");

Wenn Du in Deiner Seite links setzen willst, schreibst Du die natürlich
in der gleichen Weise(/cat/6/blah/blah).
Selbst wenn Du die links dynamisch generieren lässt, solltest Du einfach
diese Muster einhalten
for($i=0;$i<10;$i++)
echo "< a href='test.php/cat/".$i."'>kategorie-".$i."</a>";

Oder möchstest Du praktisch den QueryString haben?
Dann versuch mal das:
Code: Select all
 echo "getenv('PATH_INFO') -> ".getenv('PATH_INFO');


hoffe es hilft

beste Grüße
Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby rabby » 11. February 2004 17:15

da ich nicht alle links ändern werde, hab ich mir die lösung überlegt, dass ich alle links automatisch ändern lasse, während das script läuft.
soweit klappt es sogar, sodass ich die komplette ausgabe, bevor sie abgeschickt wird, nochmal ändern kann.
hab sie nun in nem $str abgelegt.
nun brauch ich was, womit ich die link ersezen kann und sie dann auch bearbeiten kann...
rabby
 
Posts: 28
Joined: 15. December 2003 17:39

Postby Stefan » 12. February 2004 12:37

Servus rabby,

rabby wrote:da ich nicht alle links ändern werde, hab ich mir die lösung überlegt, dass ich alle links automatisch ändern lasse, während das script läuft.
soweit klappt es sogar, sodass ich die komplette ausgabe, bevor sie abgeschickt wird, nochmal ändern kann.
hab sie nun in nem $str abgelegt.
nun brauch ich was, womit ich die link ersezen kann und sie dann auch bearbeiten kann...


Sorry, aber ich versteh nur Bahnhof.
Gib doch mal ein konkretes Beispiel.

beste Grüße
Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby rabby » 12. February 2004 14:31

habs inzwischen selbst gelöst:

Code: Select all
function ausgabe_aendern($ausgabe)
{


        $pattern  = '#href=(\'|")([^\'|"].*?)(\'|")#s';
        /*
        preg_match_all($pattern, $ausgabe, $arr);
        print_r($arr);
        $replacement = str_replace('t', '99', '\0');

        $ausgabe = preg_replace($pattern, str_replace('t', '99', '\0'), $ausgabe);
        */

  function korregiert($matches)
  {
      $matches[2] = str_replace("&", "/", $matches[2]);
      $matches[2] = str_replace("?","/",$matches[2]);
      $matches[2] = str_replace("=","/",$matches[2]);
       return "href=\"$matches[2]\"";
  }

  $ausgabe= preg_replace_callback($pattern,
             "korregiert",
             $ausgabe);

    return $ausgabe;
}


mit den ob_* befehlen kann man die ausgabe nochmal abfangen, falls es irgendwen intressiert ;-)
rabby
 
Posts: 28
Joined: 15. December 2003 17:39

Hab auch ein ähnliches Problem

Postby tischlerbude » 12. February 2004 23:51

mod_rewrite + regulären Ausdrücken

Also ich möchte aus einem Link wie diesem
index.php?page=start einen Link wie start.html machen.
Das funktioniert nun auch auf meinem Test-Server.

Problem ist aber das ich auch Links wie diesen index.php?page=verzeichnis/datei habe und einfach nicht herausbekomme wie ich das nun machen kann.
Vorallem möchte ich natürlich das ich nicht für jedes Verzeichnis extra was schreiben muss.

Code: Select all
RewriteEngine on
Options FollowSymLinks
RewriteRule ^(.*)(\.html?)$ index.php?page=$1



Hoffe hab das ist verständlich wo mein Problem liegt, denke mir aber dazu brauche ich kein neues Thema eröffnen, hoffe ist ok so.
Gruß Markus
tischlerbude
 
Posts: 4
Joined: 11. February 2004 18:03

Postby Stefan » 13. February 2004 09:37

Morsche Tischlerbude,

Wenn Dein Ausdruck nicht grösser wird wie index.php?page=verzeichnis/datei, kannst Du noch mit einer einzigen simplen Regel auskommen.

z.B
Code: Select all
RewriteRule seite_(.*)-(.*).html$ index.php?page=$1/$2


seite_verzeichnis-datei.html == index.php?page=verzeichnis/datei.

Wird der Pfad allerdings grösser/tiefer, wäre es sinnvoll, das Du mit Regulären Ausdrücken Deine Regeln universeller gestaltest.


besten Gruß
Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby tischlerbude » 13. February 2004 10:49

Funktioniert einwandfrei :)
Dankeschön Stefan
Gruß Markus
tischlerbude
 
Posts: 4
Joined: 11. February 2004 18:03


Return to Apache

Who is online

Users browsing this forum: No registered users and 17 guests