Zur Navigation

Rewrite Regel für "sprechende URL" in Unterordner

1 sim

Hallo Jörg,
ich war nun schon sehr lange nicht im Forum, daher hoffe ich erst einmal, dass Du gut durch den Schlamassel gekommen bist.

Irgendwie stolpere ich gerade über eine eigentlich simple Rewrite-Regel.
Ich glaube die Pandemie hat mich mittlerweile weichgekocht. ;-)

Ich habe für einen Freund ein paar ganz simple statische HTML-Seiten erstellt und „sprechende“ URL‘s per htaccess im Root-Verzeichnis realisiert, ohne extra einen PHP Router oder ein Framework nutzen zu müssen.

RewriteEngine On

RewriteBase /

# 301 Weiterleitung #########
RewriteCond %{THE_REQUEST} \ eineseite\.html
RewriteRule ^eineseite\.html$ https://www.domain.tld/sprechendeurl? [R=301,L]            
RewriteRule ^sprechendeurl$ eineseite.html

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

Nun kann man sowohl

https://www.domain.tld/sprechendeurl

als auch

https://www.domain.tld/eineseite.html

eingeben und man wird immer auf

https://www.domain.tld/sprechendeurl

weitergeleitet, so dass kein „Duplicate Content“ entsteht.

Jetzt möchte ich dies auch in einem Unterordner umsetzen.
Funktioniert aber nicht. Urrrg!
Ich habe im Unterordner eine weitere htaccess untergebracht und RewriteBase /unterordner genutzt.

URL soll entsprechend so aussehen:

https://www.domain.tld/unterordner/sprechendeurl

Ich würde mich über einen Denkanstoß freuen.
Das war noch nie meine Stärke und ich nutze lieber PHP-Router Klassen.

Viele Grüße

23.06.2021 19:00

2 sim

Manchmal steht man echt auf einem sehr langen Schlauch...;-)

Lösung:

  RewriteEngine On

  RewriteBase /unterordner/

  # 301 Weiterleitung eineseite.php #########
  RewriteCond %{THE_REQUEST} \ /unterordner\/eineseite\.php
  RewriteRule ^eineseite\.php$ https://www.domain.tld/unterordner/sprechendeurl? [R=301,L]            
  RewriteRule ^sprechendeurl$ eineseite.php

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

Es fehlte in der Rewrite Condition nur der Unterordner.

Ist an der Regel eigentlich etwas auszusetzten?
Es werden nur 4 Seiten im Hauptverzeichnis und 4 Seiten im Unterordner auf diese Weise umgeleitet.

Viele Grüße

23.06.2021 20:31

3 Jörg Kruse

RewriteCond %{THE_REQUEST} \ eineseite\.html

Das funktioniert? ich hätte hier eigentlich noch einen Slash erwartet:

RewriteCond %{THE_REQUEST} \ /eineseite\.html

... und entsprechend für den Unterordner:

RewriteCond %{THE_REQUEST} \ /unterordner/eineseite\.html
RewriteRule ^eineseite\.html$ https://www.domain.tld/unterordner/sprechendeurl? [R=301,L]

Die RewriteBase ergänzt hier nur das Muster in der RewriteRule.

Edit:

jetzt bist du mir mit der Antwort zuvorgekommen :)

Es fehlte in der Rewrite Condition nur der Unterordner.

Ja, weil das Muster mit einem Leerzeichen beginnt ("\ ") und danach der vollständige Pfad kommen muss, z.B. folgender Request:

GET /unterordner/eineseite.php HTTP/2.0

Es werden nur 4 Seiten im Hauptverzeichnis und 4 Seiten im Unterordner auf diese Weise umgeleitet.

Das kann man dann durchaus so machen.

23.06.2021 20:40

Beitrag schreiben (als Gast)

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





[BBCode-Hilfe]