Apache Rewrite: Wie schreibe ich eine Regel basierend auf dem Domänennamen (anstelle von HTTP_HOST)?

Apache Rewrite: Wie schreibe ich eine Regel basierend auf dem Domänennamen (anstelle von HTTP_HOST)?

Ich habe eine RewriteRule geschrieben, die auf der Basis von HTTP_HOST (www.domainname.com) funktioniert, aber ich möchte, dass sie nur auf der Basis des Domänennamenteils (domainname.com) funktioniert.

Zur weiteren Verdeutlichung

Die Ordnerstruktur ist /var/www/domainName.com.

Wenn ich diese Regel in die Apache-Konfigurationsdatei schreibe

RewriteRule ^/js/(.*) /%{HTTP_HOST}/js/$1 [L]

und greifen Sie über www.mydomain.com auf die Site zu. Es wird versucht, den Ordner zu finden /var/www/www.domainName.com, der nicht existiert.

Daher muss ich die oben genannte Regel konvertieren, um das „www“ aus dem HTTP_HOST zu entfernen.

Antwort1

Ich würde vorschlagen, dass Sie Anfragen umleiten, anstatt dieselbe Site an zwei Orten verfügbar zu machen. Erstellen Sie entweder einen neuen VirtualHost, um den Datenverkehr umzuleiten:

<VirtualHost *:80>
    ServerName www.domainName.com
    Redirect / http://domainName.com/
</VirtualHost>

Oder fügen Sie über Ihren anderen Regeln einen Satz hinzu, der das Vorhandensein des Präfixes „www.“ erkennt und den Benutzer umleitet:

RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule /(.*) http://%1/$1 [R,L]

Wenn Sie Ihre Site wirklich auf beiden Domänennamen ohne Weiterleitung haben möchten, können Sie mithilfe von „RewriteCond“ nur den Domänennamen herausziehen. Dieser steht dann der RewriteRule als %1 zur Verfügung.

RewriteCond %{HTTP_HOST} ^(?:www\.)?(.*) [NC]
RewriteRule ^/js/(.*) /%1/js/$1 [L]

Antwort2

Ich bezweifle, dass Sie dazu in der Lage sind. Wäre es nicht einfacher, einfach Links zu entsprechenden Verzeichnissen zu erstellen?

ln -s yourdomain.com www.yourdomain.com

Antwort3

Haben Sie versucht, zu verwenden %{DOCUMENT_ROOT}?

Auch möglich, wenn Du in Deinem vHost den gleichen Namen eingestellt hast, Servernameden Du in Deiner Verzeichnisstruktur verwendest, zB:

<VirtualHost *:80>
  DocumentRoot /var/www/domainame.com
  ServerName domainame.com
  ServerAlias www.domainame.com
</VirtualHost>

Dann können Sie es %{SERVER_NAME}in Ihrer Umschreibregel verwenden.

Antwort4

wie ich Ihre Frage verstehe, stellen Sie einfach IhreDokument Rootin das richtige Verzeichnis:

DocumentRoot /var/www/domainName.com

verwandte Informationen