URL basierend auf HTTP_HOST neu schreiben

URL basierend auf HTTP_HOST neu schreiben

Grundsätzlich möchte ich, dass Benutzer über Intranet und Internet auf die Seite zugreifen können.

Wenn Benutzer die Seite über das Intranet aufrufen, können sie die Intranet-IP des Servers in die Adressleiste ihres Browsers eingeben, um192.168.x.x.

Wenn Benutzer jedoch über das Internet auf die Seite zugreifen, können sie die öffentliche IP des Servers eingeben. Ich werde die URL in die öffentliche IP des Servers umschreiben.

Ich habe dies versucht, aber ich bekomme die Seitenicht richtig umgeleitet.

RewriteEngine   On
RewriteBase     /mypath/
RewriteCond     %{REQUEST_FILENAME} !-f
RewriteCond     %{REQUEST_URI}      !(.*)/$
RewriteCond     %{REQUEST_METHOD}   GET
RewriteCond     %{HTTP_HOST}        !192.168.0.1
RewriteRule     ^(.*)$          http://<public.ip.of.server>/mypath/$1/ [L,R=301]
RewriteCond     %{HTTP_HOST}        !<public.ip.of.server>
RewriteRule     ^(.*)$          http://192.168.0.1/mypath/$1/   [L,R=301]

Ich habe dies auch versucht, aber ich bekomme die Seite500 Interner Serverfehler.

<If "%{HTTP_HOST} == '192.168.0.1'">
RewriteEngine   On
RewriteBase     /mypath/
RewriteCond     %{REQUEST_FILENAME} !-f
RewriteCond     %{REQUEST_URI}      !(.*)/$
RewriteCond     %{REQUEST_METHOD}   GET
RewriteRule     ^(.*)$          http://192.168.0.1/mypath/$1/   [L,R=301]
</If>
<If "%{HTTP_HOST} == 'public.ip.of.server'">
RewriteEngine   On
RewriteBase     /mypath/
RewriteCond     %{REQUEST_FILENAME} !-f
RewriteCond     %{REQUEST_URI}      !(.*)/$
RewriteCond     %{REQUEST_METHOD}   GET
RewriteRule     ^(.*)$          http://<public.ip.of.server>/mypath/$1/ [L,R=301]
</If>

Mache ich etwas falsch?

Antwort1

Ich verwende Apache 2.2.3

Der<If>Direktive ist Teil des Kerns von Apache 2.4. Diese Anweisungen verursachen einen 500-Serverfehler, wenn Sie sie in 2.2 einfügen. Es ist überhaupt nicht klar, was Sie versuchen, aber Sie können die <If>Blöcke durch ein einfaches ersetzen RewriteCond.

Das wichtige Konzept hier ist, RewriteConddassgelten nur für die unmittelbar folgenden RewriteRuleDirektive, sie gelten nicht für andere, sondern nur für diese eine. Sie müssen also Bedingungen duplizieren, wenn Sie sie auf mehrere Regeln anwenden müssen.

RewriteEngine   On
RewriteBase     /mypath/

RewriteCond     %{HTTP_HOST} ^192.168.0.1$
RewriteCond     %{REQUEST_FILENAME} !-f
RewriteCond     %{REQUEST_URI}      !(.*)/$
RewriteCond     %{REQUEST_METHOD}   GET
RewriteRule     ^(.*)$          http://192.168.0.1/mypath/$1/   [L,R=301]

RewriteCond     %{HTTP_HOST} ^public.ip.of.server$
RewriteCond     %{REQUEST_FILENAME} !-f
RewriteCond     %{REQUEST_URI}      !(.*)/$
RewriteCond     %{REQUEST_METHOD}   GET
RewriteRule     ^(.*)$          http://<public.ip.of.server>/mypath/$1/ [L,R=301]

Aber Sie können das alles einfach loswerden, weil Sie ohne Verwendung des http://hostnameBits umleiten können:

RewriteCond     %{REQUEST_FILENAME} !-f
RewriteCond     %{REQUEST_URI}      !(.*)/$
RewriteCond     %{REQUEST_METHOD}   GET
RewriteRule     ^(.*)$  /mypath/$1/   [L,R=301]

Und damit wäre das oben genannte für jeden Host erreichbar.

verwandte Informationen