URL Shortener

In diesem Forum können Wünsche für die Weiterentwicklung von webEdition diskutiert werden.
Gerade bei umfangreichen Änderungen ist es sinnvoll, diese vor einem Eintrag in die Bugbase zu diskutieren. Das Ergebnis kann dann mit Verweis auf den Forumseintrag in die Bugbase eingetragen werden.
Forumsregeln
Bitte achtet hier besonders darauf, nicht abzuschweifen.
Wir werden hier verstärkt moderieren und ggf. Dinge in andere Foren (Smalltalk etc.) auslagern.
bolleone
Senior Member
Beiträge: 598
Registriert: So 4. Jul 2004, 00:24
Wohnort: Düsseldorf
Kontaktdaten:

URL Shortener

Beitragvon bolleone » Do 9. Jan 2014, 19:26

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?
multimediadesign.net · Atelier für Kommunikation
Grimmstr. 3 · 40235 Düsseldorf
Telefon ++49-211-4981791 · Telefax ++49-211-4981792
http://www.multimediadesign.net · bolle@multimediadesign.net

WBTMagnum
webEdition Partner
webEdition Partner
Beiträge: 1626
Registriert: Di 7. Mär 2006, 16:50
Wohnort: Wien
Kontaktdaten:

Re: URL Shortener

Beitragvon WBTMagnum » Fr 10. Jan 2014, 15:37

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

bolleone
Senior Member
Beiträge: 598
Registriert: So 4. Jul 2004, 00:24
Wohnort: Düsseldorf
Kontaktdaten:

Re: URL Shortener

Beitragvon bolleone » Fr 10. Jan 2014, 16:06

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...?
multimediadesign.net · Atelier für Kommunikation
Grimmstr. 3 · 40235 Düsseldorf
Telefon ++49-211-4981791 · Telefax ++49-211-4981792
http://www.multimediadesign.net · bolle@multimediadesign.net

WBTMagnum
webEdition Partner
webEdition Partner
Beiträge: 1626
Registriert: Di 7. Mär 2006, 16:50
Wohnort: Wien
Kontaktdaten:

Re: URL Shortener

Beitragvon WBTMagnum » Fr 10. Jan 2014, 21:33

wie du selbst schon geschrieben hast, ist hier htaccess dein freund. einfach eine rewrite rule zusammenstellen, dann funkt das schon.

hth,
sascha

bolleone
Senior Member
Beiträge: 598
Registriert: So 4. Jul 2004, 00:24
Wohnort: Düsseldorf
Kontaktdaten:

Re: URL Shortener

Beitragvon bolleone » So 12. Jan 2014, 20:39

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?
multimediadesign.net · Atelier für Kommunikation
Grimmstr. 3 · 40235 Düsseldorf
Telefon ++49-211-4981791 · Telefax ++49-211-4981792
http://www.multimediadesign.net · bolle@multimediadesign.net

bolleone
Senior Member
Beiträge: 598
Registriert: So 4. Jul 2004, 00:24
Wohnort: Düsseldorf
Kontaktdaten:

Re: URL Shortener

Beitragvon bolleone » Mo 13. Jan 2014, 18:07

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
multimediadesign.net · Atelier für Kommunikation
Grimmstr. 3 · 40235 Düsseldorf
Telefon ++49-211-4981791 · Telefax ++49-211-4981792
http://www.multimediadesign.net · bolle@multimediadesign.net

ThomasGoebe
Senior Member
Beiträge: 865
Registriert: Mo 26. Jul 2010, 23:44
Wohnort: Hannover
Kontaktdaten:

Re: URL Shortener

Beitragvon ThomasGoebe » Mo 13. Jan 2014, 20:28

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.
Thomas Göbe
webEdition Experte aus Hannover
Autor des 1. webEdition Buch (gemeinsam mit Andreas Witt)
web: http://www.projektheimat.de

WBTMagnum
webEdition Partner
webEdition Partner
Beiträge: 1626
Registriert: Di 7. Mär 2006, 16:50
Wohnort: Wien
Kontaktdaten:

Re: URL Shortener

Beitragvon WBTMagnum » Mo 13. Jan 2014, 21:32

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

ThomasGoebe
Senior Member
Beiträge: 865
Registriert: Mo 26. Jul 2010, 23:44
Wohnort: Hannover
Kontaktdaten:

Re: URL Shortener

Beitragvon ThomasGoebe » Mo 13. Jan 2014, 21:45

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.
Thomas Göbe
webEdition Experte aus Hannover
Autor des 1. webEdition Buch (gemeinsam mit Andreas Witt)
web: http://www.projektheimat.de

WBTMagnum
webEdition Partner
webEdition Partner
Beiträge: 1626
Registriert: Di 7. Mär 2006, 16:50
Wohnort: Wien
Kontaktdaten:

Re: URL Shortener

Beitragvon WBTMagnum » Di 14. Jan 2014, 01:32

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

bolleone
Senior Member
Beiträge: 598
Registriert: So 4. Jul 2004, 00:24
Wohnort: Düsseldorf
Kontaktdaten:

Re: URL Shortener

Beitragvon bolleone » Di 14. Jan 2014, 17:08

Wunderbar, tuts ;-)
multimediadesign.net · Atelier für Kommunikation
Grimmstr. 3 · 40235 Düsseldorf
Telefon ++49-211-4981791 · Telefax ++49-211-4981792
http://www.multimediadesign.net · bolle@multimediadesign.net

bolleone
Senior Member
Beiträge: 598
Registriert: So 4. Jul 2004, 00:24
Wohnort: Düsseldorf
Kontaktdaten:

Re: URL Shortener

Beitragvon bolleone » Di 14. Jan 2014, 20:29

...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?
multimediadesign.net · Atelier für Kommunikation
Grimmstr. 3 · 40235 Düsseldorf
Telefon ++49-211-4981791 · Telefax ++49-211-4981792
http://www.multimediadesign.net · bolle@multimediadesign.net


Zurück zu „webEdition Feature Requests“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast