htaccess rewrite Land ohne Subdomains

htaccess rewrite Land ohne Subdomains

ich muss die URL umschreiben von

us.example.com

Zu

example.com?country=us

ohne Subdomains

Ich habe diese beiden Regeln ausprobiert:

1.

RewriteRule (US|EG) ?c=$1 [NC , L]

2.

RewriteRule :\/\/(.*?).example.com ?C=$1 [NC , L]

aber sie haben nicht funktioniert.

also ... gibt es eine Möglichkeit, dies zu tun?

Antwort1

Sie können eine URL nicht auf verschiedene Hostnamen „umschreiben“ (Sie müssten einen Reverse-Proxy implementieren) und ich gehe davon aus, dass eine „Weiterleitung“ unerwünscht ist.

Wenn jedoch die Subdomains und die Hauptdomain alle auf denselben Bereich des Dateisystems verweisen, müssen Sie den Hostnamen/die Domain nicht ändern. Ein normales Umschreiben (auf demselben Host) ist alles, was erforderlich ist.

Um die Subdomain auf dem angefragten Host zu prüfen, benötigen Sie eine Bedingung ( Direktive), die die Servervariable (also den Wert des HTTP-Anforderungsheaders) RewriteCondprüft . DieHTTP_HOSTHostRewriteRule Musterstimmt nur mit dem URL-Pfadteil der URL überein.

Zum Beispiel:

RewriteEngine On

RewriteCond %{QUERY_STRING} !^country=
RewriteCond %{HTTP_HOST} ^(us|eg)\.example\.com [NC]
RewriteRule ^ /?country=%1 [L]

Wie oben erwähnt, wird hier davon ausgegangen, dass die Subdomains und die Hauptdomain auf denselben Bereich des Dateisystems verweisen. Dies ist bei einem System üblich, bei dem alle Anfragen von einem einzigen CMS verwaltet werden. (Und Sie versuchen in Ihren Beispielanweisungen nicht, den Hostnamen zu ändern.)

Die %1Rückreferenz enthält die Subdomäne (in diesem Beispiel „us“ oder „eg“) des angeforderten Hostnamens.

Die zusätzliche Bedingung, die die Abfragezeichenfolge auf das Fehlen des country=URL-Parameters überprüft, soll eine Umschreibschleife verhindern.

Sie haben jedoch nichts über den URL-Pfad angegeben? Und Sie sollten direkt in die Datei umschreiben, die die Anforderung verarbeitet ( index.php?). In seinem aktuellen Zustand ist das obige „Umschreiben“ darauf angewiesen, dass mod_dir eine zusätzliche Unteranforderung für den DirectoryIndex stellt.


  1. RewriteRule (US|EG) ?c=$1 [NC , L]
  2. RewriteRule :\/\/(.*?).example.com ?C=$1 [NC , L]

Diese Anweisungen enthalten zahlreiche Fehler:

  • Sie sagen, Sie haben diese ausprobiert, aber die irrtümlicheRäumeimFlaggenDas Argument führt zu einem sofortigen 500 Internal Server Error, wenn die Datei zum ersten Mal analysiert wird.
  • Wie oben erwähnt,RewriteRule Muster(erstes Argument) stimmt nur mit dem URL-Pfad überein. Der Hostname ist hiervon nicht betroffen.
  • Der reguläre Ausdruck in Nr. 1 ist viel zu allgemein und entspricht „US“ oder „EG“.überall.
  • Um eine Übereinstimmung mit einer absoluten URL zu erzielen (wie Sie es im zweiten Beispiel zu versuchen scheinen), müssten Sie eine Übereinstimmung mit einer THE_REQUESTServervariable erzielen (die die erste Zeile der Anforderungsheader enthält, einschließlich der AnforderungMethode).

verwandte Informationen