
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, RewriteCond
dassgelten nur für die unmittelbar folgenden RewriteRule
Direktive, 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://hostname
Bits 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.