Website ändert URL

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Fakiz.

    Website ändert URL

    Moin,

    ich erstelle derzeit eine kleine Api zum Anzeigen von Bildern.
    Gegeben ist ein Webserver bei Ionos mit php 8.2.
    Die Dateien liegen im Format 04-11.jpg (für April-11) auf dem Webserver

    Der Downloadlink wäre:

    Quellcode

    1. https://api.domain.de/pictures/04-11.jpg
    Dieser wird im Code (vb.net) generiert.

    Auf

    Quellcode

    1. domain.de
    liegt unsere Wordpress Homepage, daher verwende ich die Subdomain

    Quellcode

    1. api.domain.de
    Diese verlinkt in ein eigenes Verzeichnis.

    VB.NET-Quellcode

    1. Dim PicUrl As New Uri("https://api.domain.de/pictures/" & Date.Now.ToString("MM-dd", New CultureInfo("de-DE")) & ".jpg")
    2. PicUrl.OriginalString

    ... gibt auch den korrekten Link zurück.

    Nun ist es allerdings so, dass der Webserver beim Aufrufen die URL selbstständig anpasst, sollte die Datei nicht vorhanden sein und gibt die nächst passende zurück, in dem Falle wäre es 06-11.jpg.
    Rufe ich die URL im Browser auf, kann man auch direkt sehen, wie diese geändert wurde. Im Verzeichnis der Dateien liegt nur eine leere index.php, sonst keine weiteren Dateien die Code ausführen.

    Aus ...

    Quellcode

    1. https://api.domain.de/pictures/06-11.jpg

    wird beim Aufruf (Browser und Code)

    Quellcode

    1. https://api.domain.de/pictures/04-11.jpg

    wenn die Datei 04-11.jpg nicht vorhanden ist.

    Zum Testen habe ich die Bilder, die leere Index.php und den entsprechenden Code mal auf unserem Test-Server (Synology Web Station) laufen lassen und dort funktioniert es wie gewünscht, scheint also ein "Problem" von Ionos zu sein.

    Bevor ich nun damit zu Ionos gehe und die, wahrscheinlich, das Problem nicht verstehen oder mich mit "ist ja ihr Server, da müssen sie selber schauen ..." vertrösten, frag ich mal hier nach.


    Du kannst ja mal versuchen die Anfragen selbst zu behandeln.

    Leg dir im api - Verzeichnis eine .htaccess Datei an. In der leitest du dann alle Anfragen an deine index.php um. In der index.php wertest du die RequestUri aus und gibst das gewünschte Bild zurück oder eben nichts falls es nicht vorhanden ist.

    Simples Beispiel

    Quellcode: .htaccess

    1. Options -Indexes
    2. DirectoryIndex index.php
    3. RewriteEngine on
    4. RewriteBase /
    5. # Push every request to index.php.
    6. RewriteRule ^(.*)$ index.php [QSA]


    PHP-Quellcode: index.php

    1. <?php
    2. $uri = urldecode($_SERVER['REQUEST_URI'] ?? '');
    3. if (preg_match('#^/(?<image>\d{2}-\d{2}\.jpg)$#i', $uri, $match)) // Prüft ob die RequestUri mit einem gültigem Dateiname endet.
    4. {
    5. $image = __DIR__."/pictures/{$match['image']}";
    6. if (!file_exists($image))
    7. {
    8. http_response_code(404); // Datei nicht gefunden
    9. }
    10. else
    11. {
    12. header('Content-Type: image/jpg');
    13. header('X-Content-Type-Options: nosniff'); // Beugt MIME-Type confusion vor.
    14. header('Cache-Control: max-age=2592000, public'); // Cache-Control: 30 Tage
    15. http_response_code(200);
    16. readfile($path);
    17. }
    18. }
    19. else
    20. {
    21. http_response_code(400); // Ungültige Anfrage
    22. }
    23. exit;



    Bei dem Beispiel wäre dann eine gültige URL z.B. https://api.domain.de/04-11.jpg

    PS: Ich habs nicht getestet.