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

Alles über die Anwendung und Entwicklung von AddOns.

Update 18.01.2010

Beitragvon ds » 18. Jan 2010, 11: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
DECAF | Blog | Twitter @DECAFmedia
Aktuelles REDAXO-Projekt: SEED WARRIORS
Benutzeravatar
ds
 
Beiträge: 96
Registriert: 10. Okt 2006, 21:58
Wohnort: Berlin

Beitragvon ds » 18. Jan 2010, 11: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 :)
DECAF | Blog | Twitter @DECAFmedia
Aktuelles REDAXO-Projekt: SEED WARRIORS
Benutzeravatar
ds
 
Beiträge: 96
Registriert: 10. Okt 2006, 21:58
Wohnort: Berlin

Beitragvon Maw. » 18. Jan 2010, 20: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ß
Maw.
 
Beiträge: 128
Registriert: 4. Aug 2008, 09:05

Beitragvon Xong » 18. Jan 2010, 20:58

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

Bild Määääääääääääääääääääääääh!
Benutzeravatar
Xong
 
Beiträge: 1555
Registriert: 5. Jun 2008, 07:30
Wohnort: Hohndorf in Sachsen

Beitragvon Maw. » 18. Jan 2010, 21: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]
Maw.
 
Beiträge: 128
Registriert: 4. Aug 2008, 09:05

Beitragvon Xong » 19. Jan 2010, 00: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

Bild Määääääääääääääääääääääääh!
Benutzeravatar
Xong
 
Beiträge: 1555
Registriert: 5. Jun 2008, 07:30
Wohnort: Hohndorf in Sachsen

Beitragvon ds » 19. Jan 2010, 17: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
DECAF | Blog | Twitter @DECAFmedia
Aktuelles REDAXO-Projekt: SEED WARRIORS
Benutzeravatar
ds
 
Beiträge: 96
Registriert: 10. Okt 2006, 21:58
Wohnort: Berlin

Beitragvon Maw. » 20. Jan 2010, 17: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!
Maw.
 
Beiträge: 128
Registriert: 4. Aug 2008, 09:05

Beitragvon ds » 11. Mär 2010, 22: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
DECAF | Blog | Twitter @DECAFmedia
Aktuelles REDAXO-Projekt: SEED WARRIORS
Benutzeravatar
ds
 
Beiträge: 96
Registriert: 10. Okt 2006, 21:58
Wohnort: Berlin

Beitragvon Phoenix H. » 4. Mai 2010, 15: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!
Phoenix H.
 
Beiträge: 518
Registriert: 21. Sep 2006, 16:39

Beitragvon ds » 4. Mai 2010, 15:49

breastfed hat geschrieben: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.
Am besten nimmst Du die ursprüngliche fullnames-Klasse und veränderst eine Stelle (ab Zeile 326) so:

Code: Alles auswählen
      // eigentlicher artikel anhängen
      $name = $ooa->getName();
      if($ooa->isStartArticle()) $name = 'index';
      unset($ooa); // speicher freigeben
      $pathname = rex_rewriter_appendToPath($pathname, $name);
     
      $pathname = substr($pathname,0,strlen($pathname)-1).'.php';
      $REXPATH[$db->getValue('id')][$db->getValue('clang')] = $pathname;
Das müsste sein, was Du suchst.

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

Beitragvon Phoenix H. » 4. Mai 2010, 15:53

HI

das "index.php" zieht der sich nun für Jede Seite :)
Phoenix H.
 
Beiträge: 518
Registriert: 21. Sep 2006, 16:39

Beitragvon ds » 4. Mai 2010, 18:06

breastfed hat geschrieben:das "index.php" zieht der sich nun für Jede Seite :)

Huch? Eigentlich soll das nicht, und bei mir war es eben bei einem schnellen Test auch nicht so.

Hast Du die original fullnames-Klasse genommen und nur die von mir genannten Modifikationen gemacht? Und hast Du den Cache geleert?
DECAF | Blog | Twitter @DECAFmedia
Aktuelles REDAXO-Projekt: SEED WARRIORS
Benutzeravatar
ds
 
Beiträge: 96
Registriert: 10. Okt 2006, 21:58
Wohnort: Berlin

Beitragvon Phoenix H. » 5. Mai 2010, 07:41

Morgen Dirk

danke für deine Hilfe, ich hatte noch die alte Class in Betrieb, deswegen der Fehler. Aber nun habe ich doch noch eine Frage.

Wenn ich auf dem Startartikel "Leistungen" bin, dann kommt ".de/leistungen/index.php - wenn ich allerdings auch "Leistungen - Streichen" bin sollte ".de/leistungen/streichen.php" kommen und nicht wie jetzt ".de/leistungen/streichen/index.php".

Geht das auch? :)

Danke!
Phoenix H.
 
Beiträge: 518
Registriert: 21. Sep 2006, 16:39

Beitragvon ds » 5. Mai 2010, 08:46

breastfed hat geschrieben:wenn ich allerdings auch "Leistungen - Streichen" bin sollte ".de/leistungen/streichen.php" kommen und nicht wie jetzt ".de/leistungen/streichen/index.php".

Dann ist »Streichen« eine eigene Kategorie und nicht nur ein Artikel innerhalb von »Leistungen«, so wie ich es verstanden hatte?

Und kannst Du bei der Gelegenheit mal erklären, warum Du eigentlich eine solches URL-Schema verwenden willst? Vielleicht findet sich ja – bevor umgebaut wird – eine bessere Lösung :)

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

VorherigeNächste

Zurück zu AddOns [R4]

Wer ist online?

Mitglieder in diesem Forum: elektra, Google [Bot] und 0 Gäste