[gelöst] mod rewrite von domain.de/category zu domain.de/index.php?cat=category

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • wahsaga
    antwortet
    Zitat von onemorenerd Beitrag anzeigen
    Wenn eine RewriteRule angewendet wird, entsteht dadurch ja eine neue URL. Mit dieser neuen URL beginnt der ganze Rewrite-Prozess von vorn.
    Genauer gesagt: Wenn man das Rewriting verzeichnisbasiert (in .htaccess) definiert.
    Wenn die Regeln in der Serverkonfiguration stehen, dann beginnt nach dem Durchlauf aller Regeln kein "neuer Durchgang".
    Das hat etwas damit zu tun, zu welchem Zeitpunkt des URL-Mapping-Prozesses das ganze jeweils ausgeführt wird.
    (Weshalb man das ganze bei Sachen, wo höchste Performance gefragt ist, auch möglichst in der Serverkonfiguration macht. Bei Shared Hosting allerdings idR. nicht möglich.)

    Einen Kommentar schreiben:


  • einermeiner
    antwortet
    Ach du ***** klar, das läuft ja von dem root verzeichnis aus und nicht von dem in der die index.php und .htaccess Datei liegen.

    Ok danke, so funktionierts.
    Manchmal sieht man den Wald vor lauter Bäumen einfach nicht.

    Ok in dem Fall is das glaub alles geklärt.
    Nochmals danke für eure Hilfe (und Geduld )

    Gruß

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    Zitat von einermeiner Beitrag anzeigen
    Die liegt direkt im Hauptordner.

    Also in http://localhost/testsystem/index.php
    Genauso wie die .htaccess und die screen.css
    Das widerspricht sich aber. Wenn sie im Ordner testsystem liegt, kann sie nicht über http://localhost/screen.css ganz normal angezeigt werden. Hast du es mal mit /testsystem/screen.css probiert? Pfade mit / sind nämlich absolut.
    Zuletzt geändert von AmicaNoctis; 27.10.2009, 15:23.

    Einen Kommentar schreiben:


  • einermeiner
    antwortet
    Wie lautet der Pfad der Datei, in der das eingebunden werden soll?
    Die liegt direkt im Hauptordner.

    Also in http://localhost/testsystem/index.php
    Genauso wie die .htaccess und die screen.css

    Was passiert, wenn du im Browser direkt http://localhost/screen.css aufrufst?
    Sie wird mir ganz normal angezeigt.

    Funktioniert es, wenn du die .htaccess testweise mal abschaltest?
    Ja, aber das bringt mir ja nichts.

    Gruß

    Einen Kommentar schreiben:


  • Scriptfarm
    antwortet
    Sicherlich ist das Apache Modul eine tolle Sache und bei machen Anwendungsgebieten bietet sich auch die URL Manipulation an.
    Aber in diesem Fall würde ich lieber drauf verzichten, und mir lieber die Mühe machen und die Links direkt im Script umchreiben.

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    Zitat von einermeiner Beitrag anzeigen
    Mein einziges Problem ist nur das das nicht reagiert wenn ich eine .css mit

    PHP-Code:
    echo "<link rel=\"stylesheet\" href=\"/screen.css\" type=\"text/css\" />"
    einbinden will. Sobald ein / davor steht läuft das ganze nicht.
    Das wundert mich auch etwas. Wie lautet der Pfad der Datei, in der das eingebunden werden soll? Was passiert, wenn du im Browser direkt http://localhost/screen.css aufrufst? Funktioniert es, wenn du die .htaccess testweise mal abschaltest?

    Einen Kommentar schreiben:


  • einermeiner
    antwortet
    Nene, das passt schon. Ich klammere alle .css, .js und .jpg Dateien aus.

    So sieht die .htaccess Datei aus:

    Code:
    RewriteEngine on
    RewriteRule !^(.*)\.css - [C]
    RewriteRule !^(.*)\.js - [C]
    RewriteRule !^(.*)\.jpg - [C]
    RewriteRule !^index\.php - [C]
    RewriteRule ^(.*)$ index.php?cat=$1 [L]
    Mein einziges Problem ist nur das das nicht reagiert wenn ich eine .css mit

    PHP-Code:
    echo "<link rel=\"stylesheet\" href=\"/screen.css\" type=\"text/css\" />"
    einbinden will. Sobald ein / davor steht läuft das ganze nicht.

    Habt ihr dafür eine Lösung? Ich find einfach keine.

    Gruß

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    Zitat von TobiaZ Beitrag anzeigen
    Dann muss er ja bei jeder neu erstellten Datei seine Regel anpassen...
    Muss er nicht. Das sollte erstens als Beispiel dienen und zweitens hab ich damit ja auch gezeigt, dass man ganze Verzeichnisse (z. B. img, download), Dateitypen (*.pdf) und auch einzelne Dateien ausschließen kann. Was war daran jetzt so furchtbar?

    Einen Kommentar schreiben:


  • TobiaZ
    antwortet
    Zitat von AmicaNoctis Beitrag anzeigen
    alles, was du nicht "rewriten" willst, gibst du genau so an, wie auch die index.php ausgeschlossen wird: [...]
    Dann muss er ja bei jeder neu erstellten Datei seine Regel anpassen...

    Einen Kommentar schreiben:


  • einermeiner
    antwortet
    Toll da hät ich auch drauf kommen können Danke

    So funktioniert es wenn ich ein css file so eingebunden habe:

    PHP-Code:
    echo "<link rel=\"stylesheet\" href=\"screen.css\" type=\"text/css\" />"
    Aber nicht wenn ich es so eingebunden habe:

    PHP-Code:
    echo "<link rel=\"stylesheet\" href=\"/screen.css\" type=\"text/css\" />"
    Also sobald ich einen Slash / vor die screen.css Datei schreibe funktioniert es nicht mehr. Allerdings soll das auch funktionieren.

    So habe ich es schon versucht, hat aber nicht geklappt:
    Code:
    RewriteEngine on
    RewriteRule !^screen\.css - [C]
    RewriteRule !^/screen\.css - [C]
    RewriteRule !^index\.php - [C]
    RewriteRule ^(.*)$ index.php?cat=$1 [L]
    Gibt es eine Möglichkeit, dass es auch mit dem Slash funktioniert?

    Gruß

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    Hallo nochmal,

    alles, was du nicht "rewriten" willst, gibst du genau so an, wie auch die index.php ausgeschlossen wird:

    Code:
    RewriteEngine on
    RewriteRule !^index\.php - [C]
    RewriteRule !^style\.css - [C]
    RewriteRule !^script\.js - [C]
    RewriteRule !^(.+)\.pdf$ - [C]
    RewriteRule !^img/ - [C]
    RewriteRule !^download/ - [C]
    RewriteRule ^(.*)$ index.php?cat=$1 [L]
    Gruß,

    Amica

    Einen Kommentar schreiben:


  • einermeiner
    antwortet
    Ok also das mit der Endlosschleife habe ich verstanden.

    Aber was meinst du mit:

    Sollst du nicht. Lies mod_rewrite - Apache HTTP Server
    Ich soll keine Verzeichnisse ausschließen, aber was sonst? Ich hab das bestimmt schon 3 - 4 mal gelesen, aber mir fehlt der Ansatz.

    Gruß

    Einen Kommentar schreiben:


  • onemorenerd
    antwortet
    Zitat von einermeiner Beitrag anzeigen
    Wenn jemand domain.de/index.php aufrufen würde, müsste es mir "index cat = index.php" ausgeben.

    Ich verstehe nicht wo da eine Endlosschleife entsteht.
    Wenn eine RewriteRule angewendet wird, entsteht dadurch ja eine neue URL. Mit dieser neuen URL beginnt der ganze Rewrite-Prozess von vorn. Weil du mit ^(.*)$ einfach alles matchst, wird immer wieder umgeschrieben, von vorn begonnen, gematcht, umgeschriebene, von vorn begonnen, ...

    Meinst du damit, das ich dann dort alle Dateien ablegen soll, die eingebunden werden, wie z.B. CSS und JS?
    Sollst du nicht. Lies mod_rewrite - Apache HTTP Server

    Einen Kommentar schreiben:


  • einermeiner
    antwortet
    Natürlich nicht - denn dieses Muster trifft auch auf index.php zu, so dass du in einer Endlosschleife landest.
    Das versteh ich nicht. Ich zerteil mal das ganze:

    Also mit "RewriteEngine on" schalte ich das Modul an und ermögliche das Rewriting.

    Mit "RewriteRule" erstelle ich eine neue Regel.

    "^" bedeutet, am Anfang der Url
    "(.*)" bedeutet kein oder mehrere Zeihen
    Und mit "$" speichere ich das gesuchte in eine variable, in dem fall in $1
    und dann leite ich das ganze einfach an index.php?cat=$i um

    Wenn jemand domain.de/index.php aufrufen würde, müsste es mir "index cat = index.php" ausgeben.

    Ich verstehe nicht wo da eine Endlosschleife entsteht.

    Wenn jetzt domain.de/blub eingegeben wird müsste ich "index cat = blub" bekommen.

    Mit "RewriteRule !^index\.php - [C]" funktioniert das auch, ich versteh nur nicht warum.

    per RewriteCond physisch existierende Dateien/Verzeichnisse vom Rewriting ausschliessen.
    Meinst du damit, das ich dann dort alle Dateien ablegen soll, die eingebunden werden, wie z.B. CSS und JS?

    Gruß

    Einen Kommentar schreiben:


  • wahsaga
    antwortet
    Zitat von einermeiner Beitrag anzeigen
    Mit
    Code:
    RewriteEngine on
     RewriteRule ^(.*)$ index.php?cat=$1
    funktioniert es leider nicht.
    Natürlich nicht - denn dieses Muster trifft auch auf index.php zu, so dass du in einer Endlosschleife landest.

    Du könntest bspw. keinen Punkt im Muster erlauben, wenn du diesen nicht brauchst; oder auch per RewriteCond physisch existierende Dateien/Verzeichnisse vom Rewriting ausschliessen.

    Einen Kommentar schreiben:

Lädt...
X