Probleme mit htaccess und wildcard Subdomain

  • Hallo,

    ich versuche seit zwei Tagen verzweifelt meine wildcard *.domain.de auf die dynamisch erzeugten Unterordner via htaccess datei zu routen.

    Bsp:
    *.domain.de -> zeigt auf das hauptverzeichnis "subdomains"
    sub1.domain.de -> SOLL auf das im hauptverzeichnis befindliche "sub1" verzeichnis zeigen also "subdomains/sub1"
    sub2.domain.de -> SOLL auf das im hauptverzeichnis befindliche "sub2" verzeichnis zeigen also "subdomains/sub2"

    ets.

    Dafür habe ich mir wenigen aber sehr mühsam erarbeitenen code für die htaccess Datei zusammengebastelt

    Apache Configuration
    #Redirect to subdomainfolder if no special page is called
    RewriteCond %{HTTP_HOST} ^(.*)\.domain\.de$ [NC]
    RewriteRule ^$ %1/index.html [L]
    
    #Redirec to subdomainfolder if a special page is called
    RewriteCond %{HTTP_HOST} ^(.*)\.domain\.de(.*)$  [NC]
    RewriteRule ^(.*) %1/$1 [L]

    Die erste bedinung funktioniert (jedoch nicht mit Bedingung 2)


    Rufe ich also sub1.domain.de auf komme ich auf die index.html im Verzeichnis "subdomains/sub1", das ganze mit sub2 etc. geht wunderbar.

    Jetzt habe ich nur das Problem, sobald es nicht zur Index.html gehen soll also der Aufruf z.B. sub1.domain.de/andereseite.html lautet, da greift die erste Bedingung nicht.

    (Mangels wissen wie man die erste Bedingung einfach entsprechend anpasst) habe ich eine zweite erstellt.
    Diese soll nun das gleiche machen, jedoch den part hinter ".com" mit übertragen.
    Hier gehts nun nicht mehr. Sobald ich die zweite Bedingung mit in die htaccess Datei packe erhalte ich einen 500-Internal Server Error.

    Ich habe das mal hier getestet, die dort gezeigten Ausgaben sehen erstmal richtig aus
    https://htaccess.madewithlove.be?share=512d8328-31c4-53cd-a3fa-f04da1bb5d46

    Ich hoffe mir kann hier jemand weiterhelfen.



  • Mit mod_rewrite kenne ich mich nicht so gut aus. Trotzdem frage ich mich, ob der Fehler vielleicht bei der 2. RewriteRule liegt:

    • RewriteRule backreferences: These are backreferences of the form $N (0 <= N <= 9). $1 to $9 provide access to the grouped parts (in parentheses) of the pattern, from theRewriteRule which is subject to the current set of RewriteCond conditions. $0 provides access to the whole string matched by that pattern.
    • RewriteCond backreferences: These are backreferences of the form %N (0 <= N <= 9). %1 to %9 provide access to the grouped parts (again, in parentheses) of the pattern, from the last matched RewriteCond in the current set of conditions. %0 provides access to the whole string matched by that pattern.

    Also müsste die zweite RewriteRule anstatt "%1/$1", "%1/%2" aufrufen, da du ja (plump ausgedrückt) von der vorherigen RewriteCond den Wert aus der zweiten Klammer erhalten willst und nicht irgendwelche Werte nicht vorhandenener anderer, vorheriger RewriteRules.


    Das Ganze riecht mir ehrlich gesagt aber irgendwie nach einem Dirty Hack.

  • Apache Configuration
    #Redirect to subdomainfolder if no special page is called
    RewriteCond %{HTTP_HOST} ^(.*)\.domain\.de$ [NC]
    RewriteRule ^$ %1/index.html [L]
                        
    #Redirec to subdomainfolder if a special page is called
    RewriteCond %{HTTP_HOST} ^(.*)\.domain\.de(.*)$  [NC]
    RewriteRule ^(.*) %1/$1 [L]

    Normalerweise würde eine Direktive/Vorgabe für das Zielverzeichnis bereits regeln, dass standardmäßig index.html ausgeliefert wird. Die erste Regel kann man sich somit (besser) schenken – sie wird von der zweiten vollständig ersetzt, abgesehen von der expliziten Vorgabe von "index.html".

    Bei der zweiten Regel ist der zweite reguläre Ausdruck in der RewriteCond-Zeile überflüssig, da HTTP_HOST wirklich nur den Domainnamen enthält. (Wenn "domain.de.com.au" o. ä. auch abgedeckt werden soll, ist zu beachten, dass sich der Server in der VHost-Definition auch dafür zuständig fühlen muss.)

    Beide obengenannten Regeln erklären den 500er-Fehler nicht (vgl. auch htaccess tester).

    VServer IOPS Comparison Sheet: https://docs.google.com/spreadsheets/d/1w38zM0Bwbd4VdDCQoi1buo2I-zpwg8e0wVzFGSPh3iE/edit?usp=sharing

  • (Mangels wissen wie man die erste Bedingung einfach entsprechend anpasst) habe ich eine zweite erstellt.

    Diese soll nun das gleiche machen, jedoch den part hinter ".com" mit übertragen.

    Wenn das ".com" im obigen Satz gemäß dem Beispiel als ".de" zu lesen war, dann sollte die letzte RewriteRule ggf. so aussehen?

    Apache Configuration
    RewriteRule ^(.*) http://domain.de/%1%2/$1 [L]

    VServer IOPS Comparison Sheet: https://docs.google.com/spreadsheets/d/1w38zM0Bwbd4VdDCQoi1buo2I-zpwg8e0wVzFGSPh3iE/edit?usp=sharing

  • Beide obengenannten Regeln erklären den 500er-Fehler nicht (vgl. auch htaccess tester).

    Korrektur: Doch! Was der Online-Test nämlich nicht abdeckt, ist die interne Vor-/Weiterverarbeitung. Solange die Modifikation der/des resultierenden URL nämlich dabei noch denselben unveränderten HTTP_HOST mit der Subdomäne enthält, geht es wieder von vorne los, dieselbe .htaccess wird abgearbeitet und die URL wird länger und länger (denn das "[L]" unterbindet nicht die Auswertung der Regeln für den darauffolgenden internen Aufruf). :P

    VServer IOPS Comparison Sheet: https://docs.google.com/spreadsheets/d/1w38zM0Bwbd4VdDCQoi1buo2I-zpwg8e0wVzFGSPh3iE/edit?usp=sharing