Mod rewrite aktivieren

Aus DeDi-Help

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

[bearbeiten] Einrichtung

Mit Hilfe von Mod_rewrite ist es möglich Suchmaschinenfreundliche URLs zu generieren. MOD_rewrite kann man bei den meisten Servern über eine .htaccess im Projektordner recht einfach aktivieren. Suchmaschinen erkennen so auch Seiten mit eingeschalteten Session, da die Session in den URL-Pfad integriert wird. Die Seite ist dann bei den Suchmaschinen zwar mit Session registriert - dies schadet aber nicht, da dadurch noch lange kein Zutritt zu gesperrten Seiten möglich ist. Die URLs werden lediglich im Frontend umgeschrieben.

[bearbeiten] Voraussetzung

  • Apache als Webserver
  • aktiviertes Modul mod_rewrite des Apache
  • mind. DeDi V1.0.2

[bearbeiten] URLs in dieser Form www.domain.de/projektname/session/catx.html

Wenn die oben genannten Voraussetzung gegeben sind, gehen Sie wie folgt vor:

  • Wechseln Sie im backend in die Einstellungen ihres Projektes (z.B. projekt01; Administration->Projekte->Projekt konfigurieren->Allgemeine Einstellungen->Apache mod_rewrite Support) und stellen Sie "1" ein
  • Im Frontend werden nun alle Links in der o.g. Form erzeugt

Mögliche Fehler:

Fehler:Die Startseite funktioniert noch, aber die anderen werden nicht gefunden
Lösung: überprüfen Sie ob die mod_rewrite funktioniert:Hinweise   aus dem modrewrite-Forum

Beachten Sie auch, das manche Webserver den "/" vor dem zweiten Eintrag benötigen und manche nicht

Fehler: Interner Server Error
Lösung: überprüfen Sie, ob die RewriteRule ohne Zeilenumbruch geschrieben wurde


Feinheiten:

Nicht unbedingt nötig, aber eleganter. ändern Sie die bestehende Regeln in der *.htacces so ab:


 #dedi mod_rewrite support=1
 RewriteRule ^side([^/]*)\.html$ index.php?idcatside=$1 [L]
 RewriteRule ^cat([^/]*)\.html$ index.php?idcat=$1 [L]


Was machen diese Regeln? Die Klammern vor .html werden gespeichert und vom Apachemodul mod_rewrite in der Variablen $1 ausgegeben. Evtl. benötigen Sie ein "/" vor der index.php?... Das heißt, diese Regeln funktionieren immer auch wenn Sie nichts im Backend eingestellt haben! Probieren Sie es ruhig aus.Das passiert im Apache und ist von außen (z.B. von Google) (fast) nicht zu sehen.

Nutzen Sie die Frontendsession mit der Einstellungen 0. Andere Einstellungen benötigen Sie nur, wenn aus dem Frontend ein Login für Redakteure ermöglicht werden soll.

[bearbeiten] URLs in dieser Form www.domain.de/projektname/session/sprache/ordnername/seitenname.html

Benötigt wird DeDi v1.0.2 und ein Webserver mit mod_rewrite Modul.

Grundsätzlich gibt es folgende Optionen für die Unterstützung von mod_rewrite in DeDi:

0 = kein mod_rewrite 1 = mod_rewrite in der Form /cat_xx.html oder /catside_xx.html 2 = mod_rewrite in der Form http://domain/projektname/sprache/ordner1/ordner1_2/index.html

Diese Erklärung beschäftigt sich ausschließlich mit der Option mod_rewrite=2 Diese Einstellung muss im Backend unter Administration - Projekt für das jeweilige Projekt vorgenommen werden.

  • die im Projektverzeichnis vorhandene Datei htaccess.txt muss an die Gegebenheiten des Projekts angepasst werden. Hierzu sollten die Spachen, sowie die zugehörigen Sprach-IDs (Tabelle prefix_lang) bekannt sein. Wir laden die Datei per FTP herunter.
  • Der Teil de orginal htaccess.txt sieht so aus und wird an den markierten Stellen angepasst
RewriteCond %{QUERY_STRING} ^(.*)?$
RewriteRule ^/?(.*/)?deutsch/([^,]*)(,[^\?]*)?  
/index.php?rewrite_sid=$1&lang=1&rewrite_path=deutsch/$2&rewrite_values=$3&%1
  • Angenommen unsere Sprache hieße de und deren Sprach-ID wäre 3. In diesem Fall sähe eine passende htaccess.txt wie folgt aus. Wichtig ist, das Du diese Einstellung als Name der Sprache unter Deinen Projekteinstellungen hast.
RewriteCond %{QUERY_STRING} ^(.*)?$
RewriteRule ^/?(.*/)?de/([^,]*)(,[^\?]*)? 
/index.php?rewrite_sid=$1&lang=3&rewrite_path=de/$2&rewrite_values=$3&%1
  • Wenn wir nun noch eine zweite Sprache mit dem Namen en und der Sprach-ID 4 in diesem Projekt haben müsste folgender Teil der htaccess.txt hinzugefügt werden:
RewriteCond %{QUERY_STRING} ^(.*)?$
RewriteRule ^/?(.*/)?en/([^,]*)(,[^\?]*)? 
/index.php?rewrite_sid=$1&lang=4&rewrite_path=en/$2&rewrite_values=$3&%1
  • Die veränderte htaccess.txt wird gespeichert und dann per FTP wieder in das Projektverzeichnis geladen. Die noch vorhandene Datei kann überschrieben werden.
  • Nun die hochgeladene htaccess.txt in .htaccess umbenennen. (Punkt vorangestellt, "keine" Dateiendung, bzw. der Name ist die Dateiendung)
  • Wenn die .htaccess auf dem Server ist und die Einstellungen gemacht ist eigentlich alles erledigt...
  • Probleme kann es mit relativen Pfaden in *.css Dateien, im Layout oder eigenen Modulen geben. Hier helfen absolute Pfade oder eine Veränderung von z.B.

background-image: url(bild.gif);

in

background-image: url(../../bild.gif);

da wir in der url ja zwei Ordner haben, die real nicht existieren (Projektname und Sprache).

[bearbeiten] Mögliche Fehler beheben

[bearbeiten] Kontrolle

  • backend/phpinfo.php aufrufen und nach mod_rewrite suchen um sicher zu gehen, das mod_rewrite auf dem server installiert ist
  • kontrollieren, ob der Apache so konfiguriert ist, dass die .htaccess Datei interpretiert wird (in httpd.conf Abschnitt Directory, AllowOverride All)
  • kontrollieren, ob die sprachid in der .htaccess mit der projekt-sprachid übereinstimmt
  • kontrollieren, ob der sprachstring mit dem projektsprachstring übereinstimmt

[bearbeiten] Mögliche Lösungen

  • erste Zeile in der .htaccess mit # auskommentieren
  • zweite Zeile in der .htaccess mit # auskommentieren
  • / vor index.php entfernen

Also statt

/index.php?rewrite_sid=$1&lang=3&rewrite_path=de/$2&rewrite_values=$3&%1

sollte es so aussehen:

index.php?rewrite_sid=$1&lang=3&rewrite_path=de/$2&rewrite_values=$3&%1
  • falls euer Projekt in einem Unterverzeichnis liegt, solltet Ihr /index.php in einen relativen systempfad ändern

Also statt

/index.php?rewrite_sid=$1&lang=3&rewrite_path=de/$2&rewrite_values=$3&%1

sollte es so aussehen:

/projektname/index.php?rewrite_sid=$1&lang=3&rewrite_path=de/$2&rewrite_values=$3&%1
  • oder in einen absoluten systempfad

Also statt

/index.php?rewrite_sid=$1&lang=3&rewrite_path=de/$2&rewrite_values=$3&%1

könnte es so aussehen:

/homepages/25/d3164858/htdocs/projektname/index.php?rewrite_sid=$1&lang=3&rewrite_path=de/$2&rewrite_values=$3&%1
  • alle varianten mit dem auskommentieren der ersten (oder | und) zweiten zeile der .htaccess kombinieren

[bearbeiten] letzte Lösung

  • Provider um Hilfe bitten


[bearbeiten] Siehe auch

Persönliche Werkzeuge