Zur Navigation

Problem mit Erstellung einer .htaccess

1 abi

Hallo zusammen
Ich möchte CMS-Modul-Seiten in suchmaschinenfreundliche Seiten mit .htaccess umwandeln.
Da htaccess für mich ein Buch mit sieben Siegeln ist, wende ich mich an dieser Stelle an Euch.
Vielleicht hat ja jemand einen Lösungsvorschlag? Oder vielleicht ist es auch nicht möglich?

Hier einige Beispiele:
(Grundmodule z.B. Impressum, Gästebuch usw.)
domain.de/page.php?modul=Imprint umsetzen in z.B.
domain.de/html.php/modul/Imprint

(Html-Seiten z.B. pid1-usw.)
domain.de/page.php?modul=HTMLPages&pid=6 umsetzen in z.B.
domain.de/html.php/modul/HTMLPages/pid/6

(Artikel-Seiten, Rubriken 1-usw.)
domain.de/page.php?modul=Article&op=displayrubrik&rub=7&sort=0 umsetzen in z.B.
domain.de/html.php/modul/Article/op/displayrubrik/rub/7/sort/0

(Artikel-Seiten, Rubriken 1-usw., sortierte Seiten 1-usw.)
domain.de/page.php?modul=Article&op=displayrubrik&rub=7&sort=0&startpos=10&zps=10 umsetzen in z.B.
domain.de/html.php/modul/Article/op/displayrubrik/rub/7/sort/0/startpos/10/zps/10

Über eine Antwort würde ich mich freuen.

Gruß abi

29.03.2007 13:48

2 mark

Hallo abi

Grundsätzlich ist die .htaccess eine Konfigurationsdatei, mit der der Zugriff auf Webservern kontrolliert und beschränkt

Interessant wird die sache mit dem apache modul mod_rewrite
dies ermöglicht "on the fly" die augerufenen URLs umzuschreiben.

In deinem Fall wäre zuerst dem CMS beizubringen die URLs entsprechend zu erzeugen.

Danach das ganze wieder mit mod_rewrite aufzulösen.

RewriteEngine on 
RewriteRule ^seite-(.*).html$ page.php?modul=$1
wäre das (ungetestet) für das erste Beispiel

29.03.2007 14:36

3 abi

Hallo mark

Schönen Dank für die schnelle Antwort.

In deinem Fall wäre zuerst dem CMS beizubringen die URLs entsprechend zu erzeugen.
Wie habe ich dies zu verstehen?

Ich habe eine Datei mit der Bezeichnung (mod_rewrite.htaccess) angelegt, den Code
RewriteEngine on
RewriteRule ^seite-(.*).html$ page.php?modul=$1
eingefügt und in den root gelegt.
Ist es soweit richtig?
Funktioniert aber nicht.

Eine Domainumleitung beim Aufruf meiner Domain auf Google habe ich mit einer .htaccess ausprobiert. Funktioniert.
Kann ich davon ausgehen, dass mod_rewrite dann auch unterstützt wird? Der Provider sagt:"Ja".

Gruß abi

29.03.2007 15:44

4 Jörg Kruse

Zitat von abi
In deinem Fall wäre zuerst dem CMS beizubringen die URLs entsprechend zu erzeugen.
Wie habe ich dies zu verstehen?

Du musst die Links in dem CMS so ändern, dass sie auf die neuen URLs verweisen. Erst danach werden sie mithilfe von mod_rewrite wieder intern zurückverwandelt

Bei den Rules würde ich mit der längsten URL beginnen. Das Prinzip ist, dass du variablen Segmente links durch ein (.*) oder (.+) ersetzt und rechts nacheinander durch ein $1, $2 etc. wieder aufgreifst:

RewriteEngine on

RewriteBase /

RewriteRule ^html.php/modul/(.+)/op/(.+)/rub/(.+)/sort/(.+)/startpos/(.+)/zps/(.+)$ page.php?modul=$1&op=$2&rub=$3&sort=$4&startpos=$5&zps=$6

Die anderen Rules erzeugst du einfach durch entsprechende Kürzungen der ersten Rule

29.03.2007 16:08 | geändert: 29.03.2007 16:09

5 abi

Hallo Jörg

Du sagtest:

Bei den Rules würde ich mit der längsten URL beginnen. Das Prinzip ist, dass du variablen Segmente links durch ein (.*) oder (.+) ersetzt und rechts nacheinander durch ein $1, $2 etc. wieder aufgreifst:

Ich habe versucht, es auf mein oben angeführtes Beispiel (in umgekehrter Reihenfolge) einmal umzusetzen:

RewriteEngine on

RewriteBase /

RewriteRule ^html.php/modul/(.+)/op/(.+)/rub/(.+)/sort/(.+)/startpos/(.+)/zps/(.+)$ page.php?modul=$1&op=$2&rub=$3&sort=$4&startpos=$5&zps=$6

RewriteRule ^html.php/modul/(.+)/op/(.+)/rub/(.+)/sort/(.+)$ page.php?modul=$1&op=$2&rub=$3&sort=$4

RewriteRule ^html.php/modul/(.+)/pid/(.+)$ page.php?modul=$1&pid=$2

RewriteRule ^html.php/modul/(.*)$ page.php?modul=$1

Vielleicht könntest Du einmal einen Blick darauf werfen, ob ich es richtig verstanden habe.

Und

Du musst die Links in dem CMS so ändern, dass sie auf die neuen URLs verweisen. Erst danach werden sie mithilfe von mod_rewrite wieder intern zurückverwandelt

da weiß ich im Moment noch nicht so recht, wie ich vorgehen muss.

Gruß abi

29.03.2007 16:56

6 Jörg Kruse

Die Rules scheinen, soweit ich das sehe, ok. Du kannst die Wirksamkeit dieser .htaccess testen, indem du die generierten URLs, also z.B. domain.de/html.php/modul/HTMLPages/pid/6, im Browser aufrufst. Wenn die CMS-Seiten unter den neuen URLs normal aufgerufen werden, kannst du die Links entsprechend anpassen.

da weiß ich im Moment noch nicht so recht, wie ich vorgehen muss.

Du änderst die CMS-Scripte an den Stellen, in welchen die Links ausgegeben werden

29.03.2007 17:11

7 abi

Hallo Jörg
Ich habe mod_rewrite in der .htaccess reingepackt und einen Filter im Backend des CMS aktiviert, der die Urls automatisch ändert, deswegen in der url der Pfad html.php, es scheint für diese rules zu funktionieren.

Jetzt habe noch ein paar Fragen:

1.Ich habe unter bestimmten Modulen noch Links liegen, z.B. unter dem Modul "Searching" Links "Die meisten Suchbegriffe", oder unter dem Modul "User" Links "Log out", "Private Nachichten" usw. usw. die natürlich neue Pfade hervorrufen. Diese Links funktionieren jetzt natürlich noch nicht.
Muss ich für die gesammten Pfade der Module jeweils neue Rules für die .htaccess definieren, wie für die vier im Beispiel?

2.Wie ist das mit der Sicherheit? Welche chmod-Rechte darf die .htaccess Datei haben? Und hat mod_rewrite Sicherheitsbedenken?

und jetzt für den Moment die letzte Frage:
In wie weit indexiert Deines Erachtens z.B. "Google" die Tiefe der Pfade?

Ich bedanke mich für tolle Hilfe und besuche dieses Forum sicherlich des öfteren!

Gruß und einen schönen Abend

abi

29.03.2007 19:03

8 Jörg Kruse

1.Ich habe unter bestimmten Modulen noch Links liegen, z.B. unter dem Modul "Searching" Links "Die meisten Suchbegriffe", oder unter dem Modul "User" Links "Log out", "Private Nachichten" usw. usw. die natürlich neue Pfade hervorrufen. Diese Links funktionieren jetzt natürlich noch nicht.
Muss ich für die gesammten Pfade der Module jeweils neue Rules für die .htaccess definieren, wie für die vier im Beispiel?

Ja, wenn die bisherigen Rules nicht greifen, musst du entsprechende Rules erstellen

2.Wie ist das mit der Sicherheit? Welche chmod-Rechte darf die .htaccess Datei haben?

Bei mir haben .htaccess die Rechte 644 (rw-r--r--).

Und hat mod_rewrite Sicherheitsbedenken?

Grundsätzliche Bedenken sehe ich nicht. Die Rules sollten jeweils getestet werden, dass sie keine Endlosschleifen erzeugen o.ä. Und ich würde nicht alleine auf mod_rewrite vertrauen, um Scripte abzusichern (Security through Obscurity)

In wie weit indexiert Deines Erachtens z.B. "Google" die Tiefe der Pfade?

Das hängt von der internen Verlinkung ab und wie stark die Seiten von extern verlinkt sind (eine weitergehende Diskussion dieser Frage könnte vielleicht besser im SEO-Forum vorgenommen werden)

29.03.2007 20:08

9 Stefan (Gast)

Hallo Jörg,

ich hoffe es macht Dir noch Spaß dieses Thema einigen Menschen beizubringen..

Ich versuche es nun auch mal.. Ich nutze ein mehrspalten Layout in meiner Seite..
index.php ist meine Hauptseite, darin divs.. Im Inhaltsdiv include ich eine datei inhalt.php

Darin meine Cases und die einzelnen sections.

Meine links sehen so aus..
index.php?section=Startseite für die Startseite z.B.

Nun möchte ich das ganze so umbauen, dass die Startseite als
www.meine-domain.de/startseite.html angezeigt wird.

obwohl da jetzt steht
http://www.meinedomain.de/index.php?section=startseite

Ich brauche bitte einmal den kompletten Aufbau der .htaccess
( muss die eigentlich so heissen oder mod_rewrite.htaccess ?? )

Mittlerweile hab ich soviel gelesen, dass ich wieder komplett am Anfang bin und einmal eine gute Anleitung brauche um es zu kapieren. Wenn Du das Desaster einmal betrachten möchtest um dir ein genaueres Bild zu machen besuche bitte mal http://www.st-rech.de

Mit freundlichen Grüßen
Steve

19.06.2007 23:24

10 Jörg Kruse

Hallo Stefan,

wenn du nicht nur die Startseite nach diesem Muster umschreiben möchtest, kannst du dies mit folgender RewriteRule probieren:

RewriteEngine on

RewriteBase /

RewriteRule (.+)\.html index.php?section=$1

Das (.+) steht hierbei für ein oder mehrere Zeichen, und wird auf der rechten Seite durch das $1 wieder aufgenommen.

Die Datei, in welche du diese Zeilen speicherst, heißt im Normalfall .htaccess

Wenn du die Startseite dann unter der URL www.meine-domain.de/startseite.html normal aufrufen kannst, musst du in deinem Script nur noch die Links entsprechend ändern

19.06.2007 23:47