htaccess und URL umschreiben

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • 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:

    Source Code

    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

    Source Code

    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.

    Source Code

    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

    Source Code

    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.

    The post was edited 1 time, last by 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

    Source Code

    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]
    Display All


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

    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.

    The post was edited 1 time, last by Fragz ().

  • Source Code

    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]
    Display All

    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 wrote:

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

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

    Source Code

    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

    Source Code

    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

    Source Code

    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.

    The post was edited 2 times, last by Fragz ().