tutorials.de Buch-Aktion 05/2012
Like Tree4Danke
  • 1 Beitrag von Yaslaw
  • 2 Beitrag von chickenwing
  • 1 Beitrag von chickenwing
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
663
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Joe Joe ist offline Mitglied Brokat
    Registriert seit
    Aug 2009
    Ort
    Thüringen
    Beiträge
    339
    Guten Tag alle.

    Ich möchte gerne alle URL's von Format http://zahnrad.de/Backend/main.php?section=blabla
    umwandeln in http://zahnrad.de/blabla

    Leider ist das Thema Mod_Rewrite und RewriteRules völlig neu für mich so das ich nur die Hälfte verstehe. Wäre sehr nett wenn mir jemand etwas weiterhelfen könnte.

    Grüsse Joe.
    Geändert von Joe (16.11.10 um 19:12 Uhr)
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Sind eigentlich normale Reguläre Ausdrücke....

    Dieses .htaccess muss direkt unter http://zahnrad.de abgelegt sein
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    #Rewrite Engine einschalten
        RewriteEngine on
    #nur Pfade umleiten die keine Datei sind    
        RewriteCond %{REQUEST_FILENAME} !-f
    #nur Pfade umleiten die kein Ordner sind
        RewriteCond %{REQUEST_FILENAME} !-d
     
    # alles an meine Datei weiterleiten. Von da kann man dan machen was man will...
    # http://zahnrad.de/blabla -> http://zahnrad.de/Backend/main.php?section=blabla
        RewriteRule ^(.*)$ Backend/main.php?section=$1 [L,QSA]
    Joe bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    chickenwing chickenwing ist offline Mitglied Silber
    Registriert seit
    Nov 2010
    Beiträge
    56
    Hallo,

    da wären vielleicht noch ein oder zwei Dinge zu erwähnen. Vorallem manch "Neulinge" in der Welt der .htaccess gehen in der Annahme, sie könnten damit ihre bestehende Linkstruktur nach außen ändern. Das ist natürlich nicht der Fall. Die muss schon im Quellcode selbst geändert werden. Die .htaccess biegt vielmehr entsprechend der RewriteRules die Requests um.
    Nach "RewriteEngine On" sollte man am besten auch ein "RewriteBase /" angeben, auf die sich die folgenden Requests beziehen. Dadurch muss man sich um den Prefix (Domainnamen) nicht kümmern, der von der RewriteEngine verwaltet wird. Man kann zuhauf Probleme googeln, bei denen durch ein fehlendes RewriteBase RewriteRules nicht oder falsch abgearbeitet werden.
    Je nach Serverkonfiguration kann auch ein "+OptionFollowSymLinks" notwendig sein; ich würd's erstmal ohne probieren.
    Im Gegensatz zu entsprechenden PHP-Funktionen dürfen Reguläre Ausdrücke in der htaccess keine Delimiter (Begrenzungszeichen) angegeben werden. Das könnte zu falschen Ergebnissen führen.
    RewriteCond ist als eine Art "If"-Abfrage zu verstehen, d.h. die nachfolgende RewriteRule kann an bestimmte Bedingungen geknüpft werden. Wer allerdings eine relativ einfache Seitenstruktur hat, kommt meist ohne aus.
    Last but not least muss allerdings dafür der Server auch entsprechend eingerichtet sein, um überhaupt "rewriten" zu können. In Apache muss das mod_rewite-Modul eingebunden sein, in der httpd.conf muss "AllowOverrides None" (oft standardmäßig eingestellt) auf "AllowOverrides All" und das evtl. folgende "deny from all" muss in "Allow from all" geändert werden.

    Alles in allem ist das Thema rund um die RewriteEngine von Apache relativ komplex. Wer dem Gedanken anhängt, dass Thema in 1-2 Stunden abgehandelt zu haben, wird enttäuscht werden. Unabdingbar ist, sich zuerst intensiv mit den regulären Ausdrücken zu beschäftigen (wer's bis dato noch nicht getan hat). Es gibt zwar unzählige Beispiele im Netz, aber in den seltensten Fällen findet man das, was man gerade für sich persönlich braucht.

    Hier noch ein bisschen Lektüre:
    http://httpd.apache.org/docs/current...ml#rewritebase
    http://www.workingwith.me.uk/article...ng/mod_rewrite
    http://suchmaschinentricks.at/tipps-...d_rewrite.html
    http://corz.org/serv/tricks/htaccess2.php?page=3
    http://www.htaccess-guide.com/

    Greetz
    cw
    Yaslaw und Joe bedanken sich. 

  4. #4
    Joe Joe ist offline Mitglied Brokat
    Registriert seit
    Aug 2009
    Ort
    Thüringen
    Beiträge
    339
    Erstmal vielen Dank euch beiden.

    Nachdem ich gestern stundenlang probiert habe kann ich nur bestätigen was chickenwing sagt. Erstens damit wird man mal nicht eben im vorbeigehen fertig und 2.ens es ist einfacher Fehler zu provozieren als was vernünftiges hinzukriegen.

    Aber anscheinend habe ich was grundsätzlich falsch verstanden glaube ich.
    Mein Gedanke war folgender.
    Ich habe eine lange und umständliche URL, diese wollte ich sozusagen Umschreiben in eine kürzere URL mit Hilfe von Mod_Rewrite. Die so umgeschriebene URL soll dann in der Adresszeile auch sichtbar sein anstatt der alten langen URL. Gleichzeitig soll doch nach wie vor auf die Seite weitergeleitet werden.

    Also entweder ich verstehe was nicht richtig oder was ich will geht schlicht so nicht.
    Schlichtes Bsp.:
    HTML-Code:
    RewriteEngine On
    Options +FollowSymlinks 
    RewriteBase /
    
    #Soll die Seite info.php in foo.php umbenennen
    RewriteRule (.*)\info.php$ $1foo.php
    
    #Sperrt den Zugriff auf den Ordner includes und leitet auf die index.php um
    RewriteRule includes /index.php [R=301,L]
    
    # Leitet bei Error 404 auf die Seite Index.php um
    ErrorDocument 404 /index.php
    
    # Schaltet das Indexverzeichniss nach aussen hin ab
    Options -Indexes
    Die Seite http://zahnrad.de/info.php soll umbenannt werden in http://zahnrad.de/foo.php.
    Das wirft aber lediglich einen 404 Error.
    Mein Hoster hat definitiv ModRewrite angeschalten.

    Also ich hab schlicht NULL Plan warum das nicht geht wie ich gern hätte.
     

  5. #5
    chickenwing chickenwing ist offline Mitglied Silber
    Registriert seit
    Nov 2010
    Beiträge
    56
    Hallo,

    tja, dem Irrglauben, ich könnte mit mod_rewrite meinen Querystring umschreiben, bin ich auch mal verfallen als ich angefangen habe, mich damit zu beschäftigen. Wäre ja auch zu schön gewesen.
    Aber wie sollte das gehen? Die RewriteEngine "biegt" ja die Requests von außen um und nicht Deine Antwort (hier u.a. Deine internen Links).
    Du musst also erstmal Deine Linkstruktur ändern, wie sie nach außen hin zu sehen sein soll und dann kannst Du darauf basierend mittels htaccess auf die tatsächlichen Inhalte verweisen.
    Vereinfacht gesagt, wenn Deine bisherigen Links so aussahen wie index.php?id=Ursula&hobby=stricken, dann musst Du Deinen Code erstmal so umstricken, dass Deine Links z.B. so aussehen: ursula-stricken.html . Wenn jetzt ein Besucher auf ursula-stricken.html klickt, dann kannst Du mittels htaccess daraus index.php?id=ursula&hobby=stricken machen. Nur so rum geht das...
    Rewrite frickelt Dir also Deine "Aufrufe" um, nicht aber Deine Inhalte.

    Wenn es nur darum geht, eine exakt bestimmte Datei umzuleiten, dann kannst Du auch
    #Soll die Seite info.php in foo.php umbenennen
    RewriteRule \/info.php$ /foo.php
    schreiben.
    Um den Prefix http://zahnrad.de musst Du Dich nicht kümmern, da Du das via Rewritebase der Rewriteengine überlässt. Lediglich um das "/" sollte man sich evtl. kümmern, damit sowohl http://zahnrad.de als auch http://zahnrad.de/ zum selben Ergebnis kommen (ich mach das jedenfalls immer so; sollte ich vllt. mal ausprobieren, ob's wirklich nötig ist). Allerdings muss im o.g. Beispiel auch die Datei foo.php im Gegensatz zu info.php vorhanden sein. Bei der Anordnung gilt immer:
    RewriteRule Bedingung /Ergebnis, nicht andersherum


    Greetz
    cw
    Geändert von chickenwing (17.11.10 um 17:07 Uhr)
    Joe bedankt sich. 

  6. #6
    Joe Joe ist offline Mitglied Brokat
    Registriert seit
    Aug 2009
    Ort
    Thüringen
    Beiträge
    339
    Also dem Irrglauben zu erliegen ist auch garnicht so schwer, wird ja auch in jedem Tut die Möglichkeit des ShortURL angepriessen. Immerhin ist jetzt etwas Licht ins Dunkel gekommen auch wenns mir immernoch nicht ganz klar ist wie das alles miteinander arbeitet.
    Werd die Sache jetzt erstmal auf ne ganz lange Bank schieben Oder besser ganz Ad-Acta legen. Wäre ohnehin nur kosmetische Sache gewsesen und die Sicherheit wird auch nur geringfügig erhöht. Wobei es sicher noch etliche andre Dinge gibt um die Sicherheit zu erhöhen.

    Nicht desto trotz Danke für die ausführlichen Antworten.
     

  7. #7
    chickenwing chickenwing ist offline Mitglied Silber
    Registriert seit
    Nov 2010
    Beiträge
    56
    Na sagen wir mal so: es gibt einfach gigantische Möglichkeiten!
    Abgesehen von "suchmaschinenfreundlichen"-URLs kannst Du so ziemlich jeden Zugriff von außen zulassen, blockieren, redirecten und was weiß ich noch alles.
    Das mit den short-URLs stimmt ja auch, bloß musst Du die halt einpflegen und dann durch die RewriteEngine umpfriemeln lassen. Ich finde alleine schon die Möglichkeit cool, dem Besucher und den Sumas eine vermeintlich statische html-Seite zu präsentieren, die tatsächlich aber eine dynamische php-Seite ist. Das einzige, was mich bislang davon abgehalten hat, alle meine Seiten umzuschreiben, ist, dass ich mein lokalen Testserver (basierend auf einer Xampp-Installation unter XP) nicht dazu bringen kann, meine htaccess richtig abzuarbeiten. Wenn ich das (jemals) gelöst bekomme, hat für meine Seiten die Stunde Null geschlagen und keine ist mehr sicher vor mir

    Greetz
    cw
     

Ähnliche Themen

  1. htaccess und Mod_Rewrite
    Von GangXtaBoiii im Forum Hosting & Webserver
    Antworten: 1
    Letzter Beitrag: 18.02.10, 17:05
  2. Problem mit. .htaccess (mod_rewrite)
    Von blubber02 im Forum Hosting & Webserver
    Antworten: 0
    Letzter Beitrag: 08.02.10, 16:42
  3. htaccess mod_rewrite GET-Parameter
    Von fiacyberz im Forum Sonstige Sprachen
    Antworten: 1
    Letzter Beitrag: 19.05.09, 17:30
  4. Mod_Rewrite und die .htaccess bei 1und1
    Von derheine im Forum Hosting & Webserver
    Antworten: 1
    Letzter Beitrag: 01.07.08, 13:01
  5. .htaccess und mod_rewrite
    Von LapisInfernalis im Forum Hosting & Webserver
    Antworten: 0
    Letzter Beitrag: 25.01.05, 09:43