Was komplizierteres für mod_rewrite- und .htaccess-Profis.

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Was komplizierteres für mod_rewrite- und .htaccess-Profis.

Beitrag von NicTheQuick »

Hi Leute,

folgendes Problem:

Ich habe eine Domain domain.tld und das Root-Verzeichnis heißt dort /home/vhosts/5000152879/domain.tld/htdocs/. In diesem Verzeichnis gibt es die Unterverzeichnisse 'new', 'old' und 'current'. Mittels folgender .htaccess im Hauptverzeichnis bewirke ich eine interne Weiterleitung auf das Verzeichnis 'current', wenn man auf die Hauptdomain zugreift:

Code: Alles auswählen

RewriteEngine on

RewriteCond %{REQUEST_URI} !^/(current|new|old)
RewriteRule ^(.*)$ http://domain.tld/current/$1 [L]
Also solange nicht auf domain.tld/current, domain.tld/new oder domain.tld/old zugegriffen wird, leite alle Anfragen weiter auf domain.tld/current. Das bewirkt gleichzeitig, dass der Aufruf von domain.tld/old auch wirklich old anzeigt und nicht etwa auf domain.tld/current/old mapt.

Soweit so gut. Jetzt geht's zu meinem eigentlich Problem. Wenn jetzt jemand domain.tld/current aufruft, bleibt dieser Link auch in der Adresszeile stehen. Ich würde hier aber gerne dem Browser sagen, dass er bitte direkt domain.tld aufrufen soll, da das sowieso auf domain.tld/current weiterleitet. So steht auch nach Aufruf von domain.tld/current nach einem fast unsichtbaren Redirect plötzlich nur noch domain.tld in der Adresszeile.

Jetzt hab ich versucht das Skript etwas zu erweitern und hab noch folgendes eingebaut:

Code: Alles auswählen

RewriteEngine on

RewriteRule ^current(.*) http://domain.tld$1 [R=302,L]

RewriteCond %{REQUEST_URI} !^/(current|new|old)
RewriteRule ^(.*)$ http://domain.tld/current/$1 [L]
Das soll bewirken, dass ein Aufruf auf den Ordner 'current' auf '/' weitergeleitet wird und der Browser angewiesen wird die Adresszeile ebenfalls zu ändern.
Jetzt schickt der Browser allerdings eine Anfrage auf domain.tld, mod_rewrite erkennt das, leitet auf domain.tld/current um trotzdem wird wieder die erste Regel angewandt und Firefox sagt: "Fehler: Umleitungsfehler: Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann."

Wie kann ich diese Zirkelbeziehung verhindern?
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Re: Was komplizierteres für mod_rewrite- und .htaccess-Profi

Beitrag von helpy »

Schau Dir doch mal die Optionen P und PT zu RewriteRule an!

Und dann noch die folgende Seite: Redirecting and Remapping with mod_rewrite

Damit solltest Du etwas weiterkommen!

lg,
guido
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Antworten