Umleitung von Hashbangs

  • Hallo liebe J! Gemeinde,


    ich hoffe, dass mir einer von Euch weiterhelfen kann: nach stundenlangen Stöbern hab ich die richtige Antwort leider noch immer nicht finden können.

    Ich habe eine uralte Redaxo Seite auf J! migriert und alles funktioniert wunderbar - ich habe nur ein Problem: die alte Seite hatte natürlich keinen URL-Rewrite und/oder Suchmaschinenfreundliche URLs. Die meisten konnte ich via htaccess umleiten, doch habe ich jetzt noch ein paar hashbangs über und da stecke ich jetzt fest. Mein Wunschtraum wäre, dass ich die http://www.alteseite.com/abgeschlossenes-projekt#123 umleite auf http://www.neueseite.com/abgeschlossenes-projekt/projekt-abc. Ich hab jetzt mehrfach gelesen, dass ich das nicht über die htaccess lösen kann, weil # nicht server- sondern clientseitig verarbeitet wird. Für JS hab ich jedoch nur globale Anleitungen gefunden und nicht für einzelne Seiten.


    Hätte einer von Euch bitte eine Idee, wie ich das lösen könnte?


    J! 3.9.23

    PHP 7.4


    Beste Grüße aus Wien, C

  • Vielen Dank, vor allem Dir Curly Brackets, ich glaub dass das schon in die richtige Richtung geht, aber ich schaff es nicht. Die beiden verlinkten Beispiele zeigen halt _auf_ einen # und ich müsste von einem # auf eine gewöhnliche j! Seite verweisen, womit ich vor dem handling-Problem stehe. Die einzige (für mich) logische Möglichkeit die Anfrage auf ein # abzufangen und umzuleiten ist entweder ein replace_string des Zeichens # (wenn die Raute ein beliebiges anderes Zeichen, wie zb | ist kann ich sie ja serverseitig abfangen und beliebig und ganz normal umleiten) - aber das gelingt mir nicht. Fehlermeldung gibt es von der htaccess natürlich keine, nur weiß ich dass ich mich nicht vertippt habe, weil ich keine 404er oder 500er produziert habe - sondern einfach nichts erreicht hab. Oder ich leite es über JS, aber da hab ich nur globale Anleitungen gefunden, die mir hier leider nicht helfen. Hat jemand von Euch noch eine Idee?

    Vielen Dank und lg c

  • Oder ich leite es über JS, aber da hab ich nur globale Anleitungen gefunden, die mir hier leider nicht helfen. Hat jemand von Euch noch eine Idee?

    So hingehudelt. Bin kein JS-Experte für schnelle UND elegante Lösungen. Bei mir "reift" JS immer mit der Verwendung ;)

    Bin nicht sicher, welche älteren Browser "const" nicht unterstützen. Musst halt "var" verwenden.

    Und, da Suchmaschinen, glaub ich zumindest, JavaScript nicht verwenden, ist das wohl nur ein Feature für Besucher.

  • Und bei 2 verschiedenen Domains, also externe Umleitungen, gehts hiermit:

  • Hm, leider geht das nicht. Es ändert sich nichts.

    Ich habe die JS in den JS-Ordner meines Template gelegt und diese Datei im Head meiner Index eingebunden. Es hat aber keinerlei Veränderung gegeben. Auch die einführenden / die ja immer wieder gerne zu Problemen führen sind es nicht.

    Wenn ich domain.de/de/projekte/abgeschlossene-projekte#s364 eingebe schickt er mich nach wie vor auf /de/projekte/abgeschlossene-projekte und nicht auf die angebene /de/projekte/abgeschlossene-projekte/abc und behält die #s364 in der Adresse...

    Eine Idee? Vielen Dank im Vorhinein für Eure abermalige Hilfe.

    Beste Grüße, C

  • Ich habe das bei mir getestet und es funktioniert. Allerdings in der index.php des Templates direkt eingesetzt.


    Dein Code würde vielleicht helfen. Mir ist jetzt komplett nicht mehr klar wohin du umeitest. Auf eine andere Domain oder auf der selben seite


    Wichtig ist bei externen Umleitungen, dass das Protokoll (http, https) in Array redirects mitgegeben wird.

    Bzgl. einleitenden / in Array hashes und bei internen Verlinkungen in redirects: Da es sich um den Path handelt, den JavaScript aus der aktuellen Seitenadresse ermittelt, müssen die immer mit einem / anfangen.


    Schau in die JS-Fehlerkonsole des Browsers, ob was angezeigt wird.


    Wenn du das Script oben in eine JavaScript-Datei eingesetzt hast, dann auch das

    Code
    <script>

    drumrum entfernt?

  • Guten Morgen,

    vielen Dank für Deine abermalige Bereitschaft mir zu helfen! Ich habe den Fehler gefunden:

    In der index.php war das JS falsch eingebunden, denn "die API hat sich in 3.x geändert, so dass der zweite Parameter kein String sein darf." (https://docs.joomla.org/Adding_JavaScript/de)

    Mit der Einbindung als

    PHP
    <?php
    JHtml::script(Juri::base() . 'templates/custom/js/sample.js');
    ?>

    funktioniert alles wunderbar.


    Vielen, vielen Dank für Deine Hilfe,

    beste Grüße aus Wien und schöne Feiertage,

    c

  • PHP
    <?php
    JHtml::script(Juri::base() . 'templates/custom/js/sample.js');
    ?>

    *Cringe*


    Nimm doch:

    Code
    JHTML::_('script', 'templates/custom/js/sample.js');

    Wobei du die Datei wohl eher in dein Template werfen solltest, dann kannst du auch schön mit relativen Pfaden arbeiten:


    Code
    JHtml::_('script', 'sample.js', array('version' => 'auto', 'relative' => true));
  • Wobei du die Datei wohl eher in dein Template werfen solltest, dann kannst du auch schön mit relativen Pfaden arbeiten:


    Code
    JHtml::_('script', 'sample.js', array('version' => 'auto', 'relative' => true));

    Und zukünftig wäre das dann vermutlich so ?

    Code
    use Joomla\CMS\HTML\HTMLHelper;
    
    HTMLHelper::_('script', 'sample.js', array('version' => 'auto', 'relative' => true));

    Ich bin aber nur Laie und habe es weder getestet sowie keine Ahnung ob das so richtig ist.