Vorgehensweise um ein CMS auf mod_rewrite umzurüsten

Wie wir alle wissen (sollten) ändert mod_rewrite keine Links im Script. Damit auch die Links auf Deiner Page auf die neuen "Rewrited URLs" zeigen bedarf es der Anpassung im Code. Fragen und Probleme rund um's Coding werden hier diskutiert.

Moderator: Super-Mod

Vorgehensweise um ein CMS auf mod_rewrite umzurüsten

Beitragvon Scream » 19.01.2009 10:07

Hallo allerseits.

Ich möchte mein eigenes CMS auf mod_rewrite umrüsten.
Habe schon einiges gelesen aber komme nicht wirklich zurecht.

Daher habe ich ein paar Fragen.

1) Wie sollte man grundsätzlichz vorgehen wenn das CMS mit und ohne mod_rewrite laufen sollte? Eine extra Funktion erstellen die bei Möglichkeit die URLs umschreibt und ansonsten unverändert lässt?
2) Ich habe verschiedene Möglichkeiten gesehen. Eine oft genutzte ist folgende:
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^.*$ /index.php

Welcher Unterschied besteht darin, ob ich das so realisiere oder aber über eine direkte Umschreibung der URL mit RewriteRule?
Scream
.
.
 
Beiträge: 3
Registriert: 19.01.2009 10:00

Beitragvon Gumbo » 19.01.2009 13:21

Ich würde in beiden Fällen den URL-Pfad (oder das Äquivalent dazu in der Query) mit PHP parsen. Der Vorteil ist, dass so keine Unmengen an Regeln nötig sind und das CMS sowieso selber am besten weiß, was die URLs bedeuten.
Markus Wulftange
Gumbo
Moderator
Moderator
 
Beiträge: 5019
Registriert: 07.01.2005 01:18
Wohnort: Trier

Beitragvon Scream » 19.01.2009 13:43

ok danke
was müsste dazu dann in der .htaccess stehen?

Welche Funktion ist empfehlenswerter um damit weiterzuarbeiten bzw. sie zu modifizieren?
http://snipplr.com/view/5081.6819/
Code: Alles auswählen
function get_url()
{
    $arr = array();
    $uri = $_SERVER['REQUEST_URI'];

    // query
    $x = array_pad( explode( '?', $uri ), 2, false );
    $arr['query'] = ( $x[1] )? $x[1] : '' ;

    // resource
    $x         = array_pad( explode( '/', $x[0] ), 2, false );
    $x_last = array_pop( $x );
    if( strpos( $x_last, '.' ) === false )
    {
        $arr['resource'] = '';
        $x[] = $x_last;
    }
    else
    {
        $arr['resource'] = $x_last;
    }

    // path   
    $arr['path'] = implode( '/', $x );
    if( substr( $arr['path'], -1 ) !== '/' ) $arr['path'] .= '/';

    // domain
    $arr['domain']    = $_SERVER['SERVER_NAME'];

    // scheme
    $server_prt        = explode( '/', $_SERVER['SERVER_PROTOCOL'] );
    $arr['scheme']    = strtolower( $server_prt[0] );

    // url
    $arr['url'] = $arr['scheme'].'://'.$arr['domain'].$uri;

    return $arr;
}


Was bräuchte man zudem noch? Nur noch eine Funktion die "schöne URLs" wieder zusammenstellt?
Scream
.
.
 
Beiträge: 3
Registriert: 19.01.2009 10:00

Beitragvon Gumbo » 19.01.2009 17:01

Du kannst ganz einfach eine Catch-all-Regel einsetzen, etwa:
Code: Alles auswählen
RewriteCond %{REQUEST_FILENAME} !-f    # schließt Anfragen zu existierenden Dateien aus
RewriteRule !^index\.php$ /index.php [L]
Markus Wulftange
Gumbo
Moderator
Moderator
 
Beiträge: 5019
Registriert: 07.01.2005 01:18
Wohnort: Trier

Beitragvon Scream » 20.01.2009 22:29

Was kann ich machen, damit meine Bilder, CSS-Dateien und JS-Dateien nicht auch rewritet werden?
Ich könnte natürlich die Dateien absolut adressieren aber das ist zuviel arbeit alles zu ändern.

Das müsste doch auch in der .htaccess-Datei gehen aber wie?

Das ist meine aktuelle:
RewriteEngine on
RewriteBase /~ab/test/


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ /~ab/test/index.php?query=%{REQUEST_URI}&%{QUERY_STRING} [NC,L]
Scream
.
.
 
Beiträge: 3
Registriert: 19.01.2009 10:00


Zurück zu Programmierung & Scriptanpassung für mod_rewrite

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste