url_rewrite: Kurzes URL-Schema (domain.tld/artikel/)

Alles über die Anwendung und Entwicklung von AddOns.

url_rewrite: Kurzes URL-Schema (domain.tld/artikel/)

Beitragvon ds » 6. Mai 2009, 18:39

Hallo,

kurze URLs nach dem Schema domain.tld/artikel/ lassen sich mit wenigen Handgriffen an der fullnames-Klasse des url_rewrite-Addons umsetzen, siehe http://blog.decaf.de/2009/05/kurze-urls-redaxo-cms/.

(Natürlich beachten: Die Verwendung dieses Schemas ist nur dann sinnvoll, wenn sicher gestellt werden kann, dass keine zwei gleichlautenden Artikel oder Kategorien existieren, die beim Rewrite die gleiche URL ergäben!)

Update 18.01.2010:
1. Bei Mehrsprachigkeit:
a) Alle Startartikel erhalten Sprachkürzel-URL (Bsp.: domain.tld/de/ statt domain.tld/de/startseite/)
b) Der Startartikel der Hauptsprache ($REX['START_CLANG_ID']) erhält Basis-URL OHNE Sprachkürzel (Bsp.: domain.tld statt domain.tld/de/).
2. Bugfix: $REX['NOTFOUND_ARTICLE_ID'] kam immer in clang 0. (Betrifft die fullnames-Klasse allgemein, nicht nur diese Erweiterung)

Viele Grüße!
_Dirk
Zuletzt geändert von ds am 11. Mär 2010, 23:00, insgesamt 2-mal geändert.
Benutzeravatar
ds
 
Beiträge: 94
Registriert: 10. Okt 2006, 21:58
Wohnort: Berlin

Beitragvon Phoenix H. » 20. Jul 2009, 08:15

Danke - funktioniert super.
Was auch schön wäre, ist eine Kategorisierte URL.

domain.de/leistungen/scheibenwischen/

Geht das damit?
Phoenix H.
 
Beiträge: 518
Registriert: 21. Sep 2006, 16:39

Beitragvon ds » 12. Aug 2009, 11:14

breastfed hat geschrieben:Danke - funktioniert super.
Was auch schön wäre, ist eine Kategorisierte URL.

domain.de/leistungen/scheibenwischen/

Geht das damit?

Entschuldige, ich hatte verpasst, zu antworten.

Kategorisierte URL ist auch kein Problem. Dort, wo der Pfad zusammengebaut wird, muss der Code lediglich so angepasst werden, dass nur die erste Verzeichnisebene, die der gewünschten Kategorie entspricht, verwendet wird.

Folgenden Bereich (Zeile 292 ff.) aus der verlinkten fullnames-Klasse des url_rewrite-Addons..

Code: Alles auswählen
      // pfad über kategorien bauen
      /* deaktiviert für onelevel:
      $path = trim($db->getValue('path'), '|');
      if($path != '')
      {
        $path = explode('|', $path);
        foreach ($path as $p)
        {
          $ooc = OOCategory::getCategoryById($p, $clang);
          $name = $ooc->getName();
          unset($ooc); // speicher freigeben
         
          $pathname = rex_rewriter_appendToPath($pathname, $name);
        }
      }
      */

..ändern zu folgendem:

Code: Alles auswählen
      // pfad über kategorien bauen
      $path = trim($db->getValue('path'), '|');
      if($path != '')
      {
        $path = explode('|', $path);

        $ooc = OOCategory::getCategoryById($path[0], $clang);
        $name = $ooc->getName();
        unset($ooc); // speicher freigeben
         
        $pathname = rex_rewriter_appendToPath($pathname, $name);
      }

Viele Grüße!
_Dirk
DECAF | Blog | Twitter @DECAFmedia
Aktuelles REDAXO-Projekt: SEED WARRIORS
Benutzeravatar
ds
 
Beiträge: 94
Registriert: 10. Okt 2006, 21:58
Wohnort: Berlin

Beitragvon Phoenix H. » 12. Aug 2009, 11:24

Ich sag jetzt schon einmal danke ohne es ausprobiert zu haben ;)

Werde ich kommende Tage nachholen.

;)

Gebe dir dann Feedback.
Phoenix H.
 
Beiträge: 518
Registriert: 21. Sep 2006, 16:39

Beitragvon ralf.schlott » 4. Sep 2009, 12:09

Das funktioniert hervorragend und erfüllt seinen Zweck. Vielen Dank für diese Überarbeitung.

Gruß
Ralf
Benutzeravatar
ralf.schlott
 
Beiträge: 405
Registriert: 5. Dez 2007, 20:22
Wohnort: Hamburch

Beitragvon fgrote » 21. Sep 2009, 10:31

Hallo,

ich habe das Problem das ich die kurzen URLs nicht zum laufen bekomme. Hab alles so gemacht wie in der Beschreibung steht.

Habe im Rex 4.2.1 das $REX['MOD_REWRITE'] auf TRUE gesetzt und auch auf dem Server ist das MOD_REWRITE auf ON.

In der Browser Adresszeile steht zwar www.meinedomain.de/kontakt aber er kann die Seite nicht finden:

404 Not Found

The requested URL /kontakt/ was not found on this server.
Apache Server at www.meinedomain.de Port 80

Hat da einer einen Tip

LG
Florian
fgrote
 
Beiträge: 21
Registriert: 12. Dez 2007, 18:31

Beitragvon ds » 21. Sep 2009, 14:30

ich habe das Problem das ich die kurzen URLs nicht zum laufen bekomme. Hab alles so gemacht wie in der Beschreibung steht.

Danke für den (indirekten) Hinweis: Ich habe in der Beschreibung und auch in der angepassten Rewriter-Klasse vergessen die Infos bzgl. der htaccess mit aufzunehmen.

Hier der Auszug aus der originalen Rewriter-Klasse:

Code: Alles auswählen
/**
* URL Fullnames Rewrite Anleitung:
*
*   1) .htaccess file in das root verzeichnis:
*     RewriteEngine On
*     #RewriteCond %{HTTP_HOST} ^domain.tld [NC]
*     #RewriteRule ^(.*)$ http://www.domain.tld/$1 [L,R=301]
*     #RewriteBase /
*     RewriteCond %{REQUEST_FILENAME} !-f
*     RewriteCond %{REQUEST_FILENAME} !-d
*     RewriteCond %{REQUEST_FILENAME} !-l
*     RewriteCond %{REQUEST_URI} !^redaxo/.*
*     RewriteCond %{REQUEST_URI} !^files/.*
*     RewriteRule ^(.*)$ index.php?%{QUERY_STRING} [L]
*
*   2) .htaccess file in das redaxo/ verzeichnis:
*     RewriteEngine Off
*
*   3) im Template folgende Zeile AM ANFANG des <head> erg‰nzen:
*   <base href="http://www.meine_domain.de/pfad/zum/frontend" />
*
*   4) Specials->Regenerate All starten

Schau doch mal, ob Du deine htaccess angepasst hattest (entsprechend Punkt 1). Und auch, ob Du ein base href im Template angegeben hast (Punkt 3).

Sollte es danach immer noch nicht funktionieren, melde Dich bitte hier nochmal.

Viele Grüße!
_Dirk
DECAF | Blog | Twitter @DECAFmedia
Aktuelles REDAXO-Projekt: SEED WARRIORS
Benutzeravatar
ds
 
Beiträge: 94
Registriert: 10. Okt 2006, 21:58
Wohnort: Berlin

Beitragvon fgrote » 22. Sep 2009, 23:29

Hi,

also meine htaccess schaut so aus wie soll die jetzt aussehen? Wie sieht die Datei bei Punkt zwei aus?


Code: Alles auswählen
RewriteEngine On
### In case ModRewrite doesnt work remove following comment and try again
# RewriteBase /
RewriteRule ^([0-9]*)-([0-9]*)- index.php?article_id=$1&clang=$2&%{QUERY_STRING}
RewriteRule ^([0-9]*)- index.php?article_id=$1&%{QUERY_STRING}

### In case you want to secure all files via your own addon remove comment
# RewriteRule ^files/(.*) /index.php?rex_media=$1&%{QUERY_STRING} [NC]

### Remove Comments when you user Fullname "url_rewrite" AddOn
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_FILENAME} !-l
#RewriteCond %{REQUEST_URI} !^redaxo/.*
#RewriteCond %{REQUEST_URI} !^files/.*
#RewriteRule ^(.*)$ index.php?%{QUERY_STRING} [L]


Besten Dank
fgrote
 
Beiträge: 21
Registriert: 12. Dez 2007, 18:31

Beitragvon ds » 23. Sep 2009, 07:38

fgrote, in Deiner htaccess ist der wichtige Teil noch auskommentiert. Du musst die # am Anfang entfernen:
Code: Alles auswählen
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_FILENAME} !-l
#RewriteCond %{REQUEST_URI} !^redaxo/.*
#RewriteCond %{REQUEST_URI} !^files/.*
#RewriteRule ^(.*)$ index.php?%{QUERY_STRING} [L]

Viele Grüße!
_Dirk
DECAF | Blog | Twitter @DECAFmedia
Aktuelles REDAXO-Projekt: SEED WARRIORS
Benutzeravatar
ds
 
Beiträge: 94
Registriert: 10. Okt 2006, 21:58
Wohnort: Berlin

Beitragvon fgrote » 28. Sep 2009, 23:24

Soo jetzt funktioniert das auch! ;-) Ich Blödi hatte das base-href mit zwei unterschiedlichen Namen drin und dann auch noch an unterschiedlichen Stellen. Warum kein Plan aber jetzt funktioniert das ganz toll!

Danke und Gruß
Florian
fgrote
 
Beiträge: 21
Registriert: 12. Dez 2007, 18:31

Beitragvon bastians » 17. Dez 2009, 20:21

Hallo,

tolle Lösung, vielen Dank dafür. Sollte man als Option in das Addon aufnehmen sowie auf einer Wiki-Seite erklären. Was meint ihr? Oder gibt es schon eine Seite im Wiki? Ich habe leider nichts gefunden.
Grüße, Bastian
Benutzeravatar
bastians
 
Beiträge: 106
Registriert: 9. Mai 2008, 16:45
Wohnort: Stuttgart

Beitragvon Sabse » 17. Dez 2009, 21:11

Die beiden hier vorgestellten Varianten sind für umfangreiche Seiten, wo sich Namensgleichheiten nicht vermeiden lassen, leider nicht geeignet.

Wäre es mit url_rewrite auch zu realisieren, dass der Pfad zum Startartikel einfach nur den Kategorienamen enthält und ansonsten alles so ist, wie bei der Standardvariante?

Also so:

http://www.domain.com/kategorie/

und nicht so:

http://www.domain.com/kategorie/startartikel.html

und auch nicht so:

http://www.domain.com/startartikel.html


Es müssten also immer alle Kategorieebenen im Link enthalten sein, und ein Artikelname sollte nur dann angehängt werden, wenn die Kategorie mehr als einen Artikel enthält.

Ist das möglich?


Gruß, Sabrina
Sabse
 
Beiträge: 88
Registriert: 1. Apr 2008, 14:51
Wohnort: Wörth am Rhein

Beitragvon ds » 13. Jan 2010, 14:45

Hallo Sabse,

irgendwie ist Dein Post untergegangen, sorry.
Wenn ich Dich richtig verstehe, willst Du also solche URLs:

Code: Alles auswählen
domain.tld/kategorie/subkategorie/seite/

Das erreichst Du, indem Du ../url_rewrite/classes/class.rewrite_fullnames.inc.php modifizierst:

1. Kommentiere die Zeilen 318-324 aus
Code: Alles auswählen
/*
      if($ooa->isStartArticle())
      {
        $ooc = $ooa->getCategory();
        $catname = $ooc->getName();
        unset($ooc); // speicher freigeben
        $pathname = rex_rewriter_appendToPath($pathname, $catname);
      }
*/

2. Ändere Zeile 331 von
Code: Alles auswählen
$pathname = substr($pathname,0,strlen($pathname)-1).'.html';
in
Code: Alles auswählen
$pathname = substr($pathname,0,strlen($pathname)-1).'/';

Cache löschen in REDAXO > System nicht vergessen!

Viele Grüße
_Dirk
DECAF | Blog | Twitter @DECAFmedia
Aktuelles REDAXO-Projekt: SEED WARRIORS
Benutzeravatar
ds
 
Beiträge: 94
Registriert: 10. Okt 2006, 21:58
Wohnort: Berlin

Beitragvon Phoenix H. » 13. Jan 2010, 14:48

Feine Arbeit Dirk :)
Phoenix H.
 
Beiträge: 518
Registriert: 21. Sep 2006, 16:39

Beitragvon Sabse » 13. Jan 2010, 15:11

ds hat geschrieben:Hallo Sabse,

irgendwie ist Dein Post untergegangen, sorry.
Wenn ich Dich richtig verstehe, willst Du also solche URLs:

Code: Alles auswählen
domain.tld/kategorie/subkategorie/seite/



Das geht noch weiter, als wie ich es mir vorgestellt hatte, mir ging es nur darum, dass der Startartikel ohne .html erreichbar wird, jetzt steht nirgendwo mehr was von .html.

Aber so ist es auch gut, vielen Dank!

Diese ganzen Varianten sollten mit in den url_rewrite Download gepackt werden, und um es Anfängerfreundlicher zu machen, im Backend auswählbar sein.

Gruß, Sabrina.
[/quote]
Sabse
 
Beiträge: 88
Registriert: 1. Apr 2008, 14:51
Wohnort: Wörth am Rhein

Nächste

Zurück zu AddOns [R4]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste