Seite 1 von 1

URL Shortener

Verfasst: Do 9. Jan 2014, 19:26
von bolleone
Hallo WebEdition'er,

ich hätte gerne für WebEdition eine Funktion, die es ermöglicht, URL's zu verkürzen.

Beispiel: http://www.abc.de/rubrik/unterrubrik/seinetname.php soll über http://www.abc.de/ID aufgerufen werden können. Also einen URL-Shortener wir z.B. bit.ly intern.

Die ID könnte die interne WebEdition-ID des jeweiligen Dokumentes sein. Mein grober Plan: eine .htaccess fängt das irgenwie ab, leitet auf ein Skript und das holt sich die URL zur ID und leiten dann weiter.

Hat dazu eventuell jemand eine Idee, wie man das umsetzen kann?

Re: URL Shortener

Verfasst: Fr 10. Jan 2014, 15:37
von WBTMagnum
hallo bolleone,

dein plan klingt doch schon gut.

kannst du auch recht simpel per php lösen. mit den funktionen id_to_path() und header() sollte das gut umzusetzen sein.

einfaches code snippet:

Code: Alles auswählen

$url = id_to_path($_REQUEST['id']);
header("Location: $url");
anm. 1: damit id_to_path() funktioniert, musst du dich natürlich im kontext einer dynamischen webEdition seite befinden.
anm. 2: vor header() darf keine ausgabe erfolgen (sh. php doku).


cheers,
sascha

Re: URL Shortener

Verfasst: Fr 10. Jan 2014, 16:06
von bolleone
Das ist schon mal eine grandiose Lösung. Damit kann ich schon mal URL's nach dem Schema "www.abs.de/name.php?id=ID" oder "/?id=ID" abfangen. Bekommt man das irgenwie dann noch hin, dass man auch URL's nach dem Schema "www.abc.de/ID" handln kann...?

Re: URL Shortener

Verfasst: Fr 10. Jan 2014, 21:33
von WBTMagnum
wie du selbst schon geschrieben hast, ist hier htaccess dein freund. einfach eine rewrite rule zusammenstellen, dann funkt das schon.

hth,
sascha

Re: URL Shortener

Verfasst: So 12. Jan 2014, 20:39
von bolleone
Hallo Sascha,

also, das habe ich bin jetzt:

.htaccess:

Code: Alles auswählen

RewriteEngine on
RewriteRule ^http://www.muebri.de/[0-9]+$ http://www.muebri.de/index.php?uid=$1 [NC,L]
Im Template:

Code: Alles auswählen

<we:ifVarSet name="uid" type="request" doc="top">
<?php
$url = id_to_path($_REQUEST['uid']);
$surl = "http://www.muebri.de".$url;
header("Location: $surl");
?>
</we:ifVarSet>
Leider tuts das nicht. Dieser Aufruf hier klappt hingegen: http://www.muebri.de/?uid=1249

Da mache ich doch bestimmt irgendeinen Denkfehler, oder?

Re: URL Shortener

Verfasst: Mo 13. Jan 2014, 18:07
von bolleone
Hallo WebEditioner,

ich habe die Lösung jetzt gefunden:

.htaccess:

Code: Alles auswählen

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)/?$ /index.php?uid=$1 [L]
In das Master-Template kommt dann als erstes dieser Code:

Code: Alles auswählen

<we:ifVarSet name="uid" type="request" doc="top">
<?php
$url = id_to_path($_REQUEST['uid']);
$surl = "http://www.muebri.de".$url;
header("Location: $surl");
?>
</we:ifVarSet>
Funktioniert wunderbar. Demo: http://www.muebri.de/1249

Re: URL Shortener

Verfasst: Mo 13. Jan 2014, 20:28
von ThomasGoebe
Hallo bolleone,

damit zerschiesst Du Dir aber eventuelle SEO-URLs, denn diese sind auch darauf angewiesen, nicht vorhandene URLs abzufangen. Wenn Du diese hier nicht im Einsatz hast, kein Problem. Andernfalls sollte in Deiner htaccess auch folgendes klappen:

Code: Alles auswählen

RewriteEngine on
RewriteRule ^/[0-9]+$ index.php?uid=$1
Ausserdem solltest Du in Deiner Vorlage die uid Variable nicht einfach übernehmen. Also z.B. sowas machen:

Code: Alles auswählen

<we:ifVarSet name="uid" type="request" doc="top">
<?php
$url = id_to_path(abs($_REQUEST['uid']));
$surl = "http://www.muebri.de".$url;
header("Location: $surl");
?>
</we:ifVarSet>
Auch wenn id_to_path sicher programmiert sein wird, ist es immer gut, Request Variablen so früh wie möglich zu validieren.

Re: URL Shortener

Verfasst: Mo 13. Jan 2014, 21:32
von WBTMagnum
Hallo,

Noch ein Tipp bzgl. .htaccess. Besser du schreibst:

Code: Alles auswählen

<ifModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule ^/[0-9]+$ index.php?uid=$1
</ifModule>
Dann gibt es keine 500er Meldung vom Webserver, falls mod_rewrite mal nicht zur Verfügung steht.

Bzgl. id_to_path():
HIer wird in der Funktion intval($id) aufgerufen. Das sollte soweit also safe sein.

Sidenote: Interessant ist, dass id_to_path() auch ein Array als Parameter akzeptiert. Daher hilft abs() auch nicht wirklich weiter. In dem Fall ist es wohl besser man überprüft ob $url ein Array ist und berücksichtigt ggf. nur den ersten Rückgabewert für die Weiterverarbeitung.


Liebe Grüße,
Sascha

Re: URL Shortener

Verfasst: Mo 13. Jan 2014, 21:45
von ThomasGoebe
Hi Sascha,

auch wenn in id_to_path selbst den Wert prüft, verlasse ich mich ungern darauf sondern prüfe alle eingehenden Variablen gerne so früh wie möglich selbst. Ich weiss ja nie, was in id_to_path in Zukunft gemacht wird. Aber vielleicht ist das einfach Geschmackssache bzw. fehlt eine verbindliche Handhabe / Richtlinie, wo webEdition intern Variablen geprüft werden.

Deine Sidenote habe ich nicht verstanden. Ich habe aber eine eigene:
eigentlich sollte id_to_path gar nicht genutzt werden! Von dem Einsatz interner webEdition Funktionen ist immer abzuraten. Das Beispiel liese sich auch mit einem Aufruf von <we:url id="$id" to="global" nameto="url"> lösen, natürlich muss vorher die ID aus der request uid in eine (globale) id überführt werden.

Re: URL Shortener

Verfasst: Di 14. Jan 2014, 01:32
von WBTMagnum
Hey,
ThomasGoebe hat geschrieben:auch wenn in id_to_path selbst den Wert prüft, verlasse ich mich ungern darauf sondern prüfe alle eingehenden Variablen gerne so früh wie möglich selbst. Ich weiss ja nie, was in id_to_path in Zukunft gemacht wird. Aber vielleicht ist das einfach Geschmackssache bzw. fehlt eine verbindliche Handhabe / Richtlinie, wo webEdition intern Variablen geprüft werden.
Mein Ansatz ist, dass es hier wenig Sinn macht Eingaben mehrfach zu überprüfen. Irgendwann wird das unperformant.
ThomasGoebe hat geschrieben:Deine Sidenote habe ich nicht verstanden.
Macht nichts. Ist auch nur ein sehr theoretischer Fall ;-).
ThomasGoebe hat geschrieben:eigentlich sollte id_to_path gar nicht genutzt werden! Von dem Einsatz interner webEdition Funktionen ist immer abzuraten.
Full ACK!
ThomasGoebe hat geschrieben:Das Beispiel liese sich auch mit einem Aufruf von <we:url id="$id" to="global" nameto="url"> lösen, natürlich muss vorher die ID aus der request uid in eine (globale) id überführt werden.
Guter Einwand! Die somit fast PHP freie Lösung könnte demnach wie folgt aussehen (ungetestet):

Code: Alles auswählen

<we:ifVarSet name="uid" type="request">
  <we:setVar to="global" nameto="id" from="request" namefrom="uid" />
  <we:url id="$id" to="global" nameto="url">

<?php
  header('Location: http://www.muebri.de' . $url);
?>
</we:ifVarSet>
Cheers,
Sascha

Re: URL Shortener

Verfasst: Di 14. Jan 2014, 17:08
von bolleone
Wunderbar, tuts ;-)

Re: URL Shortener

Verfasst: Di 14. Jan 2014, 20:29
von bolleone
...AAAABER:

tuts - wie Ihr vermutet habt - nicht in Kombination mit SEO-URL's:

Code: Alles auswählen

<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /webEdition/redirectSEOurls.php
RewriteRule ^([0-9]+)/?$ /index.php?uid=$1 [L]
</ifModule>
Das produziert dann einen dauerhaften Fehler. Bin mir aber sicher, dass der Code nicht korrekt ist...?

Kann man irgendwie rules so kombinieren, dass das läuft?