# Wie kann ich URLs umbenennen vergleichbar mit einem shortener



## rernanded (23. Juli 2021)

Hallo
wie kann ich folgende Seiten-URLs(Links) einer Website umwandeln?

https://www.beispielsdomain.xyz/seite-1/unterseite-1_maschinen.html
https://www.beispielsdomain.xyz/seite-1/unterseite-2_sondermaschinen.html
https://www.beispielsdomain.xyz/seite-1/unterseite-3_werkzeugmaschinen.html
.
.
.
https://www.beispielsdomain.xyz/seite-100/unterseite-100_maschinenbauteile_archiv_register.html

so dass sie so im Browser angezeigt werden. Vgl. url shortener

https://beispielsdomain.xyz/1_1_ma
https://beispielsdomain.xyz/1_2_soma
https://beispielsdomain.xyz/1_3_wema
.
.
.
https://beispielsdomain.xyz/100_100_mbar

Gibt es eine Alternative zum shortener? Wenn es nur per shortener geht, wie kann ich den selbst erstellen ohne Bit.ly und Co.?

MONI


----------



## basti1012 (23. Juli 2021)

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 (28. Juli 2021)

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 (28. Juli 2021)

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 (28. Juli 2021)

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 (28. Juli 2021)

rernanded hat gesagt.:


> 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.


----------



## Sempervivum (29. Juli 2021)

Ich habe mich mal daran gesetzt und das mit .htaccess ausgearbeitet:

```
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 (29. Juli 2021)

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:

```
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 (29. Juli 2021)

> 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.


----------



## Anri (5. August 2021)

ui viel arbeit ^^


----------

