[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
url_rewrite: Kurzes URL-Schema (domain.tld/artikel/) - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Benutzeravatar
ds
Admin
Beiträge: 247
Registriert: 10. Okt 2006, 22:58
Wohnort: Berlin
Kontaktdaten: Website

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

6. Mai 2009, 19: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 12. Mär 2010, 00:00, insgesamt 2-mal geändert.

Phoenix H.
Beiträge: 520
Registriert: 21. Sep 2006, 17:39
Kontaktdaten: ICQ

20. Jul 2009, 09:15

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

domain.de/leistungen/scheibenwischen/

Geht das damit?
Ich find ein CMS gut.

Benutzeravatar
ds
Admin
Beiträge: 247
Registriert: 10. Okt 2006, 22:58
Wohnort: Berlin
Kontaktdaten: Website

12. Aug 2009, 12: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

Phoenix H.
Beiträge: 520
Registriert: 21. Sep 2006, 17:39
Kontaktdaten: ICQ

12. Aug 2009, 12:24

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

Werde ich kommende Tage nachholen.

;)

Gebe dir dann Feedback.
Ich find ein CMS gut.

Benutzeravatar
ralf.schlott
Beiträge: 625
Registriert: 5. Dez 2007, 21:22
Wohnort: Hamburch
Kontaktdaten: Website

4. Sep 2009, 13:09

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

Gruß
Ralf
- Danke für Redaxo! -
http://www.prenzlweb.de

fgrote
Beiträge: 21
Registriert: 12. Dez 2007, 19:31

21. Sep 2009, 11: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

Benutzeravatar
ds
Admin
Beiträge: 247
Registriert: 10. Okt 2006, 22:58
Wohnort: Berlin
Kontaktdaten: Website

21. Sep 2009, 15: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

fgrote
Beiträge: 21
Registriert: 12. Dez 2007, 19:31

23. Sep 2009, 00: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

Benutzeravatar
ds
Admin
Beiträge: 247
Registriert: 10. Okt 2006, 22:58
Wohnort: Berlin
Kontaktdaten: Website

23. Sep 2009, 08: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

fgrote
Beiträge: 21
Registriert: 12. Dez 2007, 19:31

29. Sep 2009, 00: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

bastians
Beiträge: 104
Registriert: 9. Mai 2008, 17:45
Wohnort: Stuttgart
Kontaktdaten: Website

17. Dez 2009, 21: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

Sabse
Beiträge: 97
Registriert: 1. Apr 2008, 15:51
Wohnort: Wörth am Rhein
Kontaktdaten: Website

17. Dez 2009, 22: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

Benutzeravatar
ds
Admin
Beiträge: 247
Registriert: 10. Okt 2006, 22:58
Wohnort: Berlin
Kontaktdaten: Website

13. Jan 2010, 15: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

Phoenix H.
Beiträge: 520
Registriert: 21. Sep 2006, 17:39
Kontaktdaten: ICQ

13. Jan 2010, 15:48

Feine Arbeit Dirk :)
Ich find ein CMS gut.

Sabse
Beiträge: 97
Registriert: 1. Apr 2008, 15:51
Wohnort: Wörth am Rhein
Kontaktdaten: Website

13. Jan 2010, 16: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]

Benutzeravatar
ds
Admin
Beiträge: 247
Registriert: 10. Okt 2006, 22:58
Wohnort: Berlin
Kontaktdaten: Website

Update 18.01.2010

18. Jan 2010, 12:28

Hallo,

ich habe heute ein Update gemacht. Betrifft vor allem mehrsprachige Websites:

a) Alle Startartikel erhalten Sprachkürzel-URL (Bsp.: domain.tld/de/ statt domain.tld/de/startseite/)
b) Der Startartikel der Hauptsprache (clang 0) erhält Basis-URL OHNE Sprachkürzel (Bsp.: domain.tld statt domain.tld/de/).

Beispielhaft mal die SEED WARRIORS-Website anschauen:
http://seedwarriors.org/ (statt seedwarriors.org/en/ statt seedwarriors.org/en/homepage/)
http://seedwarriors.org/de/ (statt seedwarriors.org/de/startseite/)

Hintergrund zu b): Ich habe das Sprachkürzel deshalb weggemacht, weil sonst zwei identische Seiten existieren würden. Die Startseite unter der Domain, und die Startseite unter Domain + Sprachkürzel der Hauptsprache (etwa /en/).


Neue Fullnames-Klasse hier runterladen, die alte überschreiben und im REDAXO-Backend den Cache löschen:
http://blog.decaf.de/2009/05/kurze-urls-redaxo-cms/

Viele Grüße
_Dirk

Benutzeravatar
ds
Admin
Beiträge: 247
Registriert: 10. Okt 2006, 22:58
Wohnort: Berlin
Kontaktdaten: Website

18. Jan 2010, 12:35

Achso, der Vollständigkeit halber: Wer eine Seite mit der alten Fullnames-Klasse online hat, sollte seine Rewrite-Regeln ergänzen, etwa so:

Code: Alles auswählen

RewriteRule ^en/$              http://%{HTTP_HOST}       [R=301,L]
RewriteRule ^en/homepage/$     http://%{HTTP_HOST}       [R=301,L]
RewriteRule ^de/startseite/$   http://%{HTTP_HOST}/de/   [R=301,L]
Cool URIs don't change :)

Maw.
Beiträge: 129
Registriert: 4. Aug 2008, 10:05
Kontaktdaten: Website

18. Jan 2010, 21:48

Hallo,
ich nutze dieses tolle "Addon".
Nur ein Problem und zwar mein Redaxo liegt in einem Unterordner des root-verzeichnisses auf dem Webserver und jetzt bekomme ich folgende URL:

www.domain.de/unterordner/startseite.html

Ich möchte jedoch www.domain.de/startseite.html

Lässt sich das realisieren?

Gruß

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

18. Jan 2010, 21:58

Maw. hat geschrieben:Lässt sich das realisieren?
Setze einfach mal die RewriteBase auf diesen Unterordner.
LG,
Xong

[ externes Bild ] Määääääääääääääääääääääääh!

Maw.
Beiträge: 129
Registriert: 4. Aug 2008, 10:05
Kontaktdaten: Website

18. Jan 2010, 22:11

noch keine Änderung mit folgender htaccess im Verzeichnis wo redaxo installiert ist, in diesem fall also in /panoramafotografie

Code: Alles auswählen

RewriteEngine On
   #RewriteCond %{HTTP_HOST} ^domain.tld [NC]
    #RewriteRule ^(.*)$ http://www.domain.tld/$1 [L,R=301]
    RewriteBase /panoramafotografie
     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]

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

19. Jan 2010, 01:10

Maw. hat geschrieben:noch keine Änderung mit folgender htaccess im Verzeichnis wo redaxo installiert ist, in diesem fall also in /panoramafotografie
Mein Fehler. =)

Ich muss ehrlich gestehen, dass ich mir auch schon die Zähne daran ausgebissen habe.

Versuch´s mal mit einer htaccess-Datei im Domainroot mit folgendem Inhalt:

Code: Alles auswählen

RewriteEngine On
RewriteBase /
RewriteRule .* SUBDIR/index.php
Das ist ungetestet, könnte aber funktionieren.

Jetzt musst du das url_rewrite-Schema nur noch so anpassen, dass der Unterordner nicht mehr in den Links auftaucht.

Wenn das nicht klappt, habe ich noch eine andere Idee, die aber ein bisschen Overkill ist. Ich drück´ dir also die Daumen! =)
LG,
Xong

[ externes Bild ] Määääääääääääääääääääääääh!

Benutzeravatar
ds
Admin
Beiträge: 247
Registriert: 10. Okt 2006, 22:58
Wohnort: Berlin
Kontaktdaten: Website

19. Jan 2010, 18:04

Maw. hat geschrieben:Nur ein Problem und zwar mein Redaxo liegt in einem Unterordner des root-verzeichnisses auf dem Webserver und jetzt bekomme ich folgende URL:

www.domain.de/unterordner/startseite.html

Ich möchte jedoch www.domain.de/startseite.html

Lässt sich das realisieren?

Gruß
Dafür musst Du — soweit ich das sehe — die Fullnames-Klasse modifizieren, denn dort werden die URLs auf Basis von dirname($_SERVER['PHP_SELF']) zusammengebaut, nicht aufgrund einer Variable, die Du im Backend oder wo auch immer anpassen könntest.

Zeile 98:

Code: Alles auswählen

$script_path = str_replace(' ', '%20', dirname($_SERVER['PHP_SELF']));
ergänzen/ersetzen mit

Code: Alles auswählen

$script_path ='/';
Zeile 236:

Code: Alles auswählen

$baseDir = str_replace(' ', '%20', dirname($_SERVER['PHP_SELF']));
ergänzen/ersetzen mit

Code: Alles auswählen

$baseDir = '/';
htaccess würde ich ins Root-Verzeichnis packen und an dieser Stelle um Dein Unterverzeichnis ergänzen:

Code: Alles auswählen

RewriteRule ^(.*)$ panoramafotografie/index.php?%{QUERY_STRING} [L]
Viele Grüße
_Dirk

Maw.
Beiträge: 129
Registriert: 4. Aug 2008, 10:05
Kontaktdaten: Website

20. Jan 2010, 18:05

wow, ich war da schon zig stunden am googeln - probieren usw. weil das Problem war, dass ich die ganze Domain in dieses unterverzeichnis "rewriten" musste.
und jetzt ersetze ich diese zwei Codeabschnitte und es funktioniert :)

vielen Dank dafür!

Benutzeravatar
ds
Admin
Beiträge: 247
Registriert: 10. Okt 2006, 22:58
Wohnort: Berlin
Kontaktdaten: Website

11. Mär 2010, 23:58

Hallo,

nochmal ein kleiner Bugfix: Die Hauptsprache war fälschlicherweise als clang = 0 angegeben und wurde nun gegen $REX['START_CLANG_ID'] getauscht. Der zugehörige Wert befindet sich in der master.inc.php und kann schließlich auch mal ein anderer als Null sein(, so wie heute in einem Projekt vorgekommen).

Zeile 328:

Code: Alles auswählen

if (!($db->getValue('id') == $REX['START_ARTICLE_ID'] && $clang == $REX['START_CLANG_ID'])) // onelevel: Startartikel in Hauptsprache ohne Sprachkürzel
(Sonst keine weiteren Änderungen.)

Viele Grüße!
_Dirk

Phoenix H.
Beiträge: 520
Registriert: 21. Sep 2006, 17:39
Kontaktdaten: ICQ

4. Mai 2010, 16:15

Hi Dirk

ich habe eine Frage. Kannst du mir zeigen wie ich eventuell das URL Rewrite wie folgt aufbaue:

Ich habe folgende Struktur:

Startseite
- Leistungen
- - Streichen

Das domain.de/leistungen/streichen.php habe ich hinbekommen.
Nur wie mach ich das die Startartikel mit verarbeitet werden. So zb:
domain.de/leistungen/index.php - bisher würde domain.de/leistungen.php raus kommen, aber das ist nicht gewünscht.

Geht das?

Danke dir!
Ich find ein CMS gut.

Zurück zu „Allgemeines [R4]“