RewriteRule von dynamischer url zu neuer dynamischer url ?

  • Hallo,

    ich habe meine homepage neu gestaltet mit dynamischen content.

    da ich sehr viel content habe ist es für mich von vorteil wo ich jetzt nur eine index.php habe und der content dann immer nur geladen wird

    meine urls sehen zur zeit so aus:

    http://domain.de/?s=content

    da es sich aber um eine nicht mehr exsistierende url handelt wollte ich diese gerne umleiten auf

    http://domain.de/?s=neuer_content

    nur wie mache ich das?
    habe folgendes versucht aber leider klappt das nicht mit dynamischen urls:

    redirect permanent http://www.domain.de/?s=content http://www.domain.de/?s=neuer_content.

    ich habe bereits folgende regeln in meiner htaccess:

    umleitung nach www wenn eingabe ohne www erfolgt.
    und umleitung von /index.php nach /?s=content

    was auch so erhalten bleiben sollte...
    nur was mache ich mit den umleitungen der urls ?

    hier mal meine datei:

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^domain.de$ [NC]
    RewriteRule ^(.*) http://www.domain.de/$1
    RewriteRule ^index.php$ http://www.domain.de [R=301,L]

    bitte um rat ...

  • ich würde dir in deiner index.php einfach nen replace oder sowas in der art empfehlen, weiß ja nicht wie du die datein dann rein lädst.
    Aber ich machs über ifs mit denen ich dann Vars wie Überschrift, und Dateiname definiere und dann halt über include. Wenn du das auch so hast dann könntest du einfach über das if ne andere Datei laden.
    Wenn du direkt über den Content von $s die Datei lädst dann empfehle ich dir ein replace vorher welches quasi bei:
    $s=content; das ganze zu $s=neuer_content; replaced.
    Du weißt was ich meine?^^
    Sprich lass das ganze mit htacces und so, wozu hast du sonst dein eignes kleines CMS da drin?^^

    MfG
    EDIT:
    Als alternative würde ich dir was ganz allgemeines was IMMER funzt wenn eine datei nicht existiert empfehlen:
    bau ein if(file_exist()) ein und wenn du false bekommst leite auf deine Startseite um.
    Das verhindert das Leute durch manuelle eingaben oder so dann bei fehlermeldungen landen.

  • Hallo,

    ich lade den content direkt über die variable ?s
    ich würde das gerne alles über den redirect 301 weiterleiten wegen suchmaschienenoptimierung.

    ich habe auch schon überlegt freundliche url zu machen, das wäre wohl noch besser oder?
    meine jetzigen sehen ja so aus:
    http://www.garnelen-hl.de/?s=infos

    so hatte ich mir das gedacht:
    http://www.garnelen-hl.de/infos/

    nur weiß ich nicht wie ich das in der htaccess hinbekomme...

    ebenso habe ich duplicate content auf der startseite:

    http://www.garnelen-hl.de/
    http://www.garnelen-hl.de/?s=start

    eigentlich auch noch http://www.garnelen-hl.de/index.php?s=start
    da ich aber via htaccess von index.php nach ?s= umleite ist das schonmal gelöst.

    meine meta angaben in jedem dokument sind einzigartig.
    verwirklicht habe ich das mit case

    gruß
    micha

  • ok, also mit htaccess kenne ich mich nicht wirklich aus.

    Wie gesagt als funktionierende Lösung würde ich dir am Anfang ne Abfrage vorschlagen in der du prüfst ob es das Dokument gibt, wenn nicht einfach $s auf einen festen Wert einstellen wie z.B. $s=start
    Damit wird der User ohne das er was merkt bei falscheingabe oder manipulation automatisch immer auf die Startseite geführt und bekommt keine blöden Fehlermeldungen.

    Soweit ich weiß wäre das auch SEO technisch ok da der Robot dann numa auch umgeleitet wird.

    Und ich habs bei dir gerade probiert, wenn ich manuell etwas in $s eintrage dann komme ich auf default, was ne blöde Sache ist, finde ich.

    Wenn du mit .../infos/ oder so arbeiten willst wäre eine Möglichtkeit mit ner index.html und nem redirect oder du befasst dich halt nochmal mit htaccess. Für mich muss ich sagen das ich die $_GET Variante gut und auch komfortabel finde da sich die Stammurl nicht verändert.

    MfG

  • Anleitungen für einfache mod_rewrite-Regeln für solche Fälle gibt es viele. Z.B. diese hier:
    http://www.andreas-kalt.de/blog/modrewrite-entraetselt (ist aber Wordpress-basiert)

    Für deinen Fall sollte so etwas für die einfache Weiterleitung ausreichen:

    Apache Configuration
    RewriteRule ^(.*)/ /index.php?s=$1 [L]

    Wenn Du dann auch noch ungültige URLs abfangen willst:

    Apache Configuration
    RewriteRule ^index.php index.php [L,R=404]

    Auch die Übergabe eines Query-Strings wie ?s=abcd lässt sich darüber abfangen. Schau dich mal nach ${QUERY_STRING} um.

    Ich würde sowas nie über PHP lösen, da dies zum Einen die Last am Server erhöht (mod_rewrite wird noch vor dem PHP-Parser ausgeführt -> geringere Last bei vielen Zugriffen) und zum Anderen mehr Kontrolle ermöglicht (HTTP-Status-Codes lassen sich nicht so einfach per PHP setzen).

  • Hallo,

    habe das nun folgendermaßen gemacht:

    Nun werden alle dynamischen urls nach %1.html umgeleitet und auch angezeigt.

    jedoch kann man die urls dann immernoch unter http://www.domain.de/index.php?s=irgendeineseite aufrufen welche nicht umgeleitet wird ...

    ich hatte dafür folgendes in meiner htaccess drinne:

    RewriteRule ^index.php$ http://www.garnelen-hl.de [L,R=301]

    wenn ich die zeile aber wieder reinmache dann werden die dynamischen urls zwar umgeleitet aber nicht angezeigt.

    irgend eine kleinigkeit ist hier doch noch falsch ....