Zur Navigation

.htaccess weiterleitung funktioniert nicht wie sie soll.

1 James (Gast)

Ich hätte mich ja gerne registriert aber ich hab keine .de Mail, also versuch ich es als Gast.
Folgendes Problem, die Startseite (index.html) liegt nicht im Wurzelverzeichnis der Webseite, sondern im Unterordner client/, dorthin soll die .htaccess leiten.

Die vorgaben:
- Keine 301 Weiterleitung, weil 404 Fehler ausgegeben werden müssen.
- Der Unterordner soll in der Browser Adresszeile nicht sichtbar sein.

Es wird über einen Client auf den Unterordner API/ zugegriffen und die mit Stoplight Studio erstellte Doku lies sich nicht testen, weil die 404 Fehler durch die 301 immer auf die Index Datei zeigte.

In der jetzigen .htaccess funktioniert das grundsätzlich mit dem Chrome immer, nur der Firefox zeigt immer wieder das client/ mit an.
Ich hab jetzt schon den cache auf 0 gesetzt, um sicher zu sein, das die Seite immer neu geladen wird, hilft aber nichts, wenn der FF einmal den Unterordner in der Adresszeile angezeigt hat bekomme ich ihn nicht mehr weg.

Ich setz mal die .htaccess hier rein vielleicht findet ja jemand den Fehler oder weiß, warum ich nicht das gewünschte Ergebnis bekomme.


# Cache ausschalten
FileETag None  
<IfModule mod_headers.c>
   Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
   Header set Pragma "no-cache"
   Header set Expires "Mon, 1 Jan 2010 01:00:00 GMT"
</IfModule>
# Directory Listing deaktivieren
Options -Indexes

# Einschaltung der Weiterleitung
RewriteEngine on

#greift wenn an der uri kein client/ anhängt
RewriteCond %{REQUEST_URI} !client/

#greift wenn wenn die Anforderung kein Ordner (Directory) -d oder Datei (File) -f ist
#suche nach Ordnern auskommentiert da sie in seltenen fällen beim ersten Aufruf der Seite fehler erzeugt.

#RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 

#Das Flag [L] veranlasst mod_rewrite, die Verarbeitung des Regelsatzes zu beenden.
RewriteRule ^(.*)$  client/$1 [L]

05.05.2021 10:44

2 Jörg

Die interne Weiterleitung verhindert nicht, dass die URL mit /client/ am Anfang aufgerufen wird. Dazu bräuchte es zusätzlich eine 301-Weiterleitung.

Es wird über einen Client auf den Unterordner API/ zugegriffen und die mit Stoplight Studio erstellte Doku lies sich nicht testen, weil die 404 Fehler durch die 301 immer auf die Index Datei zeigte.

Das verstehe ich nicht so ganz. Werden da die Referrer ausgewertet?

Der Königsweg ist es in solchen Fällen, mit Status Code 301 auf die extern sichtbare URL weiterzuleiten und dann so wie in deiner htaccess Datei die externe URL auf die interne URL umzuschreiben. Damit es dabei nicht zu einer Endlosweiterleitung kommt, wird bei der externen Weiterleitung THE_REQUEST statt REQUEST_URI abgefragt

RewriteEngine on

RewriteCond %{THE_REQUEST} /client/
RewriteRule ^/?client/(.*)$ https://example.com/$1 [R=301,L]

# hiernach der interne Redirect...

wenn der FF einmal den Unterordner in der Adresszeile angezeigt hat bekomme ich ihn nicht mehr weg.

Folgst du da irgendwelchen Links? die müssen dann ggf. auch angepasst werden. Ansonsten würde ich vor dem Testen nochmals den kompletten Browser-Cache leeren, vielleicht liegt da noch eine alte 301-Weiterleitung drin, die auch nicht entferrnt wird, wenn der Cache auf 0 gesetzt wird. Oder hängt der Browser noch an irgendeinem Proxy, wo so etwas zwischengespeichert wird?

05.05.2021 11:59

3 James (Gast)

Erstmal vielen Dank für die schnelle Antwort.
Klingt logisch, aber ich hab das Problem das es 3 verschiedene Domains gibt.
1 Produktiv
2 Test
3 Lokal für Entwicklung.

Von einem Proxy weiß ich nichts, ich denke das es am FF liegen könnte da der Chrome nur die Domain ohne Unterordner anzeigt.

Es wird über einen Client auf den Unterordner API/ zugegriffen und die mit Stoplight Studio erstellte Doku lies sich nicht testen, weil die 404 Fehler durch die 301 immer auf die Index Datei zeigte.


Das verstehe ich nicht so ganz. Werden da die Referrer ausgewertet?

Soweit mir bekannt, sollte es nicht so sein, Stoplight Studio ist wie der Swagger Editor ein Tool um die Pfade(Routen) der Rest API zu dokumentieren, wenn die Pfade (in meinem Fall der Lokale) eingetragen sind, wird von SLS der Pfad mit der entsprechenden Route aufgerufen und die Rückgabe angezeigt, da kann man sich den Response Body, Header sowie den Original Request anzeigen lassen.

In der ersten .htaccess Version war noch eine 301 Umleitung auf den client Ordner drin, wenn ich damit versuchte einen 404 Fehler zu provozieren, (Aufruf einer Route, die es nicht gibt) wollte er mich zur Index umleiten.

Mit der zweiten Version der .htaccess macht er was er soll nur das der Ordner oben angezeigt wird, das war in der ersten Version auch schon.

Das war die erste Version.
# Directory Listing deaktivieren
Options -Indexes

# Einschaltung der Weiterleitung
RewriteEngine on

# Umleitung leeres Verzeichnis
RewriteRule ^$ /client [R=301]

# Umleitung unbekannte Verzeichnise und Dateien
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ /client [R=301]

05.05.2021 13:50

4 Jörg

Klingt logisch, aber ich hab das Problem das es 3 verschiedene Domains gibt.

Die Weiterleitung sollte auch nur mit Angabe des absoluten Ziel-Pfades funktionieren:

RewriteCond %{THE_REQUEST} /client/
RewriteRule ^/?client/(.*)$ /$1 [R=301,L]

Deine erste .htaccess Datei leitet von https://example.com/ weiter nach https://example.com/client. Mein Vorschlag war es, dies genau umgekehrt zu machen:

RewriteEngine on

RewriteCond %{THE_REQUEST} /client/
RewriteRule ^client/(.*)$ /$1 [R=301,L]

RewriteCond %{REQUEST_URI} !client/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$  client/$1 [L]

Ein Aufruf https://example.com/client/bla wird weitergeleitet nach https://example.com/bla. Sofern es /bla nicht als Datei gibt, wird die URL intern auf /client/bla umgeschrieben.

Im Prinzip ist das deine zweite .htaccess Datei erweitert um eine Weiterleitung von Browsern, die sich "verlaufen" haben. Für Stoplight Studio sollte das keinen Unterschied machen: solange du die URLs ohne /client/ einträgst, wird auch nichts weitergeleitet

Die Ursache, warum sich der Firefox "verläuft", ist damit aber noch nicht geklärt. Wenn es nicht am Cache oder Proxy liegt, vielleicht an unterschiedlichen Einstellungen. Wie findet denn der Wechsel von https://example.com/ nach https://example.com/client statt - folgst du dabei irgendeinem Link?

05.05.2021 16:35 | geändert: 05.05.2021 16:37

5 James (Gast)

Super, im Firefox und im Chrome funktioniert es einwandfrei.
Aber, war ja klar, dass ein aber kommt :-)
Stoplight flippt aus, wenn ich im Firefox den Pfad:
http://example.com/appServer/API/base/environment.php
aufrufe bekomme ich ein JSON Objekt in dieser Form:

{"environment":"DEVELOPMENT","shopURL":"https:\/\/example.com"}
Im Chrome dasselbe, und so soll es auch sein.

Wenn ich den Pfad in Stoplight aufrufe bekomme ich ein 403 Forbidden.
SLS ruft über diesen Request auf:
{
  "method": "get",
  "url": "http://example.com/appServer/API/base/environment.php"
}

06.05.2021 06:41

6 Jörg

Die 403 kommt aber wohl nicht durch die zusätzliche Weiterleitung zustande? die kommt ja nur zum Tragen, wenn Stoplight eine URL http://example.com/client/irgendwas übergeben wird.

Ein Fehler 403 weist ja auf fehlende Zugriffsrechte hin. Sind Firefox und Chrome eingeloggt und greifen dann mit einem Cookie auf diese URL zu?

06.05.2021 11:30

7 James (Gast)

Ich hab eben mal die .htaccess deaktiviert und mit Stoplight nochmals getestet.
Da funktioniert es auch nicht, es kann also eigentlich nicht an der .htaccess liegen.
Das Ganze ist ein etwas älteres Konstrukt und basiert noch auf SESSIONS bis es auf JWT umgebaut wird, aber seither hat es funktioniert, muss mal durchtesten, woran es liegen könnte, aber die .htaccess funktioniert jetzt so wie sie soll.
Vielen Dank.

06.05.2021 11:45

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]