htaccess und URL umschreiben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • htaccess und URL umschreiben

    Servus!
    Hatte mich gerade angemeldet und habe eine kleine Frage.
    - Nun der Umgang mit einer htaccess und das Umschreiben einer URL, sind manchmal ein wenig knifflig
    - aber diesesmal sollte ich wohl jemanden fragen der sich auskennt....
    -

    Zur Problemstellung > Host auf hosteurope.de.
    Ein klick auf einen Menüeintrag erzeugt folgende URL: domain.de/ticket.html?id=1
    und ich würde gerne, um das lesbarer zu gestalten, folgendes haben wollen:
    domain.de/englisch-lernen.html

    seit vielen Stunden sitze ich an rewrite und erhalte "kein" Ergebnis.
    Die .htaccess sieht folgender maßen aus:

    ######
    RewriteEngine on
    RewriteRule ^(.*)\.html$ php/rewrite.php [NC]
    #
    # meine einträge ab hier
    RewriteRule englisch-lernen.html$ ticket.html?id=1
    # oder
    # RewriteRule ^englisch-lernen$ ticket.html?id=1 [NC]
    #Ende


    der Inhalt der rewrite.php (oben in htaccess)
    <?
    session_start();
    require "../config/default.php";
    require "../php/default.php";
    $player = new player();
    Surl = explode("?",$_SERVER["REQUEST_URI"]);
    $path = ($_SERVER["REQUEST_URI"]!="/") ? str_replace(".html","",$url[0]) : "/index" ;
    if(file_exists("../cms/meta".$path.".yml")) {
    $meta = $player->simpleyml_load_file("../cms/meta".$path);
    } else {
    header("Location:/index.html");
    }
    $layout = "../cms/template/default/".str_replace(".html","",$_SERVER["REQUEST_URI"]).".phtml";
    if(file_exists($layout)) {
    include $layout;
    } else {
    include "../cms/template/default/layout.phtml";
    }
    ?>

    die htaccess wird aber genutzt - ein Löschen bestätigt dieses.

    Kann mir hier jemand helfen?
  • Ich weiß nicht ob es dir noch hilt, aber wesentlich einfacher ist es, wenn du die id mit einbaust. Sprich aus

    /ticket.html?id=1

    wird

    /1-englisch-lernen.html

    Eine entsprechende Regel würde so aussehen:

    Quellcode

    1. RewriteEngine on
    2. RewriteRule ^([0-9]+)-([^/\.]*)/?$ ticket.html?id=$1 [nc]


    Ich denke mein Ansatz sollte für dich wesentlich einfacher sein.

    Viel Spaß
  • Ich klinke mich mal hier ein.

    Meine Domain index.php?f=2 habe ich umgeschrieben mit

    Quellcode

    1. RewriteRule ^(.*)--f([0-9]*) index.php?f=$2&%{QUERY_STRING} [L]


    in Dies-ist-ein-test-thema--f2.htm

    Jetzt würde ich gerne mit mehr Parametern Arbeiten

    index.php?f=2&page=2

    in Dies-ist-ein-test-thema--f2.htm&page=3

    Wie müsste die .htaccess dazu aussehen?
  • Jeder Parameter wird mit einer eigenen Regel abgefangen. Das heißt, du musst aufpassen, dass die erste Regel nicht ausversehen die zweite Regel übernimmt (Slash rausnehmen als Beispiel). Also könnte dein Grundgerüst etwa so aussehen.

    Quellcode

    1. RewriteEngine on
    2. RewriteCond %{REQUEST_FILENAME} !-f
    3. RewriteCond %{REQUEST_FILENAME} !-d
    4. RewriteRule ^([^/]+)$ index.php?p=$1 [L]
    5. RewriteCond %{REQUEST_FILENAME} !-f
    6. RewriteCond %{REQUEST_FILENAME} !-d
    7. RewriteRule ^([^/]+)/([^/]+)$ index.php?p=$1&sp=$2 [L]
  • Danke.

    Ich denke nicht das sich diese Überschrieben.
    Mein Grundgerüst ist ja bereits

    Quellcode

    1. RewriteEngine on
    2. RewriteRule ^(.*).htm$ $1.php
    3. RewriteBase /seo
    4. RewriteRule ^(.*)--f([0-9]*) index.php?f=$2&%{QUERY_STRING} [L]
    5. RewriteRule ^(.*)--t([0-9]*) topic.php?t=$2&%{QUERY_STRING} [L]


    und darauf möchte ich gerne aufbauen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Fragz ()

  • Ich würde trotzdem zwei unabhängige Regeln verwenden, da der page-Parameter ja nicht zwingend gegeben ist. Das heißt eine Regel, die auch diesen Fall beachtet würde m.M.a. unnötig kompliziert werden.
    Ich hab mal versucht deinen Code hier reinzubasteln. Ich hoffe es klappt, da ich ein paar kleine Änderungen gemacht habe

    Quellcode

    1. RewriteEngine on
    2. RewriteRule ^(.*).htm$ $1.php
    3. RewriteBase /seo
    4. RewriteCond %{REQUEST_FILENAME} !-f
    5. RewriteCond %{REQUEST_FILENAME} !-d
    6. RewriteRule ^([^/]+)--f([0-9]+)$ index.php?f=$2 [L]
    7. RewriteCond %{REQUEST_FILENAME} !-f
    8. RewriteCond %{REQUEST_FILENAME} !-d
    9. RewriteRule ^([^/]+)--f([0-9]*)/([0-9]+)$ index.php?f=$2&t=$3 [L]
    Alles anzeigen


    Interessensfrage: Was bezweckst du mit QUERY_STRING? Wenn ichs richtig im Kopf habe, ist das doch nur bei RewriteConds relevant?
  • Quellcode

    1. RewriteCond %{REQUEST_FILENAME} !-f
    2. RewriteCond %{REQUEST_FILENAME} !-d
    3. RewriteRule ^([^/]+)--f([0-9]+)$ index.php?f=$2 [L]


    Klappt leider nicht. Die Seite lässt sich nicht aufrufen.

    Interessensfrage: Was bezweckst du mit QUERY_STRING? Wenn ichs richtig im Kopf habe, ist das doch nur bei RewriteConds relevant?

    Gute Frage, ichhabe mir dies aus einem alten phpBB Seo Plugin geklaut.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Fragz ()

  • Quellcode

    1. RewriteEngine on
    2. RewriteRule ^(.*).htm$ $1.php
    3. RewriteBase /seo
    4. RewriteCond %{REQUEST_FILENAME} !-f
    5. RewriteCond %{REQUEST_FILENAME} !-d
    6. RewriteRule ^([^/]+)--f([0-9]+)$ index.php?a=$2 [L]
    7. RewriteCond %{REQUEST_FILENAME} !-f
    8. RewriteCond %{REQUEST_FILENAME} !-d
    9. RewriteRule ^([^/]+)--f([0-9]+)/([0-9]+)$ index.php?a=$2&b=$3 [L]
    Alles anzeigen

    Bei mir läufts jetzt, zumindest lokal^^
  • Komisch, bei mir läufts auch mit $.
    Der Aufruf für die Regeln ist jetzt:
    mein-forum--f123/3 // Ausgabe: f=123 & page=3

    Fragz schrieb:

    Mein-erstes-Forum--f2.htm&page-2

    Für diese Syntax müssten wir die Regeln nochmal umschreiben, ungefähr so:

    Quellcode

    1. RewriteRule ^([^/]+)--f([0-9]+).htm&page-([0-9]+) index.php?a=$2&b=$3 [L]

    Finde ich persönlich aber nicht schön, da htaccess ja genau dazu da ist Dateiendungen und Paramterzusätze in der URL schön zu schreiben
  • HiHo,

    erstmal Danke.
    Ich konnte das Problem nun eingrenzen.

    Dein Code funktioniert sofern ich .htm am Ende der URL weg lasse. Das ist kein Problem. Ich habe kurzerhand das .htm aus allen Files entfernt.

    Folgender Code Funktioniert

    Quellcode

    1. RewriteCond %{REQUEST_FILENAME} !-f
    2. RewriteCond %{REQUEST_FILENAME} !-d
    3. RewriteRule ^([^/]+)--f([0-9]*)$ index.php?f=$2 [L]
    4. RewriteCond %{REQUEST_FILENAME} !-f
    5. RewriteCond %{REQUEST_FILENAME} !-d
    6. RewriteRule ^([^/]+)--f([0-9]*)--pg([0-9]*)$ index.php?f=$2&page=$3 [L]


    Folgender Code gillt für Topics

    Quellcode

    1. RewriteCond %{REQUEST_FILENAME} !-t
    2. RewriteCond %{REQUEST_FILENAME} !-d
    3. RewriteRule ^([^/]+)--t([0-9]*) topic.php?t=$2 [L]
    4. RewriteCond %{REQUEST_FILENAME} !-t
    5. RewriteCond %{REQUEST_FILENAME} !-d
    6. RewriteRule ^([^/]+)--t([0-9]*)--pg([0-9]*)$ topic.php?t=$2&page=$3 [L]


    dieser funktioniert natürlich nicht obwohl dieser identisch ist bis auf den Dateinamen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Fragz ()