Wie kann ich URLs umbenennen vergleichbar mit einem shortener

basti1012

Erfahrenes Mitglied
mit der htaccess Datei könntest du die ordner veschwinden lassen.
die endungen (.html,.php) kann man damit auch weg machen.
Ob man den Dateinamen damit noch so ändern kann das weiß ich leider nicht
 

Jan-Frederik Stieler

Monsterator
Moderator
Doch auch den Dateinamen kann man per htaccess umbenennen. Aber viel Spass.
Ich brech mir da jedesmal wieder einen ab und oft funktioneirt es dann eher schlecht als recht.
 

rernanded

Erfahrenes Mitglied
Okay, dann wissen wir ja wie es besser nicht geht, doch wie könnte es einfach umgesetzt werden, wenn schon nicht mit js, htaccess und auch nicht mit einem fremden Dienstleister - was ich nicht möchte?
MONI
 

Jan-Frederik Stieler

Monsterator
Moderator
Also .htaccess ist dafür schon da.
Das ist das Tool für sowas.
Nur ist das nicht so einfach wirklich funktionierend hinzubekommen.
Auch hat das viel mit der Serverkonfiguration zu tun.
 

basti1012

Erfahrenes Mitglied
Gibt es eine Alternative zum shortener? Wenn es nur per shortener geht, wie kann ich den selbst erstellen ohne Bit.ly und Co.?
Das könnte man theoretisch mit PHP selber erstellen.
Den ganze Webseite mit der htaccess auf einer Datei umleiten.
Zb index.php?1_1_ma
Die index.php fragt in der DB nach welche richtige Datei sich hinter 1_1_ma befindet.
Dann wird der Inhalt aus der richtigen Datei geholt( oder Datenbank ).
Ob das der richtiger weg ist weiß ich aber nicht.
 
Zuletzt bearbeitet:

Sempervivum

Erfahrenes Mitglied
Ich habe mich mal daran gesetzt und das mit .htaccess ausgearbeitet:
Code:
RewriteEngine on
RewriteRule ^1_1_ma$ /seite-1/unterseite-1_maschinen.html
RewriteRule ^1_2_soma$ /seite-1/unterseite-2_sondermaschinen.html
RewriteRule ^1_3_wema$ /seite-1/unterseite-3_werkzeugmaschinen.html
RewriteRule ^100_100_mbar$ /seite-100/unterseite-100_maschinenbauteile_archiv_register.html
Leider habe ich keine Regel erkennen können, wie man die Langtexte automatisch erzeugen kann, so dass es kein Einzeiler geworden ist. Auf der anderen Seite aber auch ein Vorteil weil es so klarer und weniger kryptisch ist.
 

Technipion

Erfahrenes Mitglied
Wenn ich das richtig sehe, interessieren uns ja im Prinzip nur die ersten beiden Zahlen in der gekürzten URL. Die Aufgabe ist also im Grunde einfach einen String "X_X_irgendwas" zu parsen und im Dateisystem die entsprechende Datei auszulesen (mit Sanitizing natürlich!).

Ob das rein über die .htaccess möglich ist, weiß ich nicht. Aber mit eigentlich so ziemlich jedem Web-Framework sollte das ein Kinderspiel sein.
Hier ein Beispiel mit Python/Flask:
Python:
import os
import glob
from flask import Flask


app = Flask(__name__)


@app.route('/')
def index():
    return 'This should load index.html'


@app.route('/<shorturl>')
def load_from_shortened_url(shorturl):
    # parse shortened url and serve matching file
    
    shorturl_split = shorturl.split('_')
    if len(shorturl_split) != 3:
        return f'Invalid shortened url: {shorturl}'
    
    s1, s2, s3 = shorturl_split # extraction
    
    # sanitize:
    try:
        i1 = int(s1)
        i2 = int(s2)
    except ValueError as verr:
        return f'Invalid numbers given: {s1}, {s2}'
    except Exception as ex:
        return 'Something went horribly wrong'
    
    html_filename = None
    
    searchpath = os.path.join(os.getcwd(), f'seite-{i1}', f'unterseite-{i2}_')
    # pattern:   www.mydomain.com/cwd/seite-X/unterseite-X_sometext.html
    # find files with matching pattern:
    for fname in glob.glob(searchpath + '*'):
        if fname.endswith('.html'):
            html_filename = fname # hit
            break
    
    if html_filename is not None:
        return serve_html_file(html_filename)
    else:
        return f'The requested file could not be found!'


def serve_html_file(html_filename):
    # dummy function for demonstration purposes
    return f'Serving file: {html_filename}'

Das Beispiel ist bewusst seeehr einfach gehalten, damit man das Wesentliche besser erkennen kann. Einfach den hinteren Teil der URL splitten, auf Gültigkeit prüfen, und daraus den Dateipfad konstruieren - fertig. Ob man das jetzt in Go macht, oder in Rust mit Rocket, oder von mir aus auch mit NodeJS, bleibt im Prinzip immer das gleiche.
Voraussetzung ist natürlich, dass die Dateinamen auch wirklich eindeutig sind. Ansonsten braucht man tatsächlich noch eine Datenbank, denn woher soll der Server wissen, dass "wema" für "Werkzeugmaschinen" steht?

Gruß Technipion
 

Sempervivum

Erfahrenes Mitglied
woher soll der Server wissen, dass "wema" für "Werkzeugmaschinen" steht?
Das ist genau der Punkt und daran scheitert ein Algorithmus. Der erste Teil mit den Nummern wäre auch in .htaccess kein Problem, mit Regex in einem Einzeiler zu erledigen.