Reescribir URL basada en HTTP_HOST

Reescribir URL basada en HTTP_HOST

Básicamente quiero que los usuarios puedan acceder a la página a través de intranet e internet.

Si los usuarios acceden a la página a través de la intranet, pueden escribir la IP de la intranet del servidor en la barra de direcciones de su navegador para192.168.x.x.

Pero cuando los usuarios acceden a la página a través de Internet, pueden escribir la IP pública del servidor. Reescribiré la URL a la IP pública del servidor.

He probado esto pero me sale la pagina.no redirigido correctamente.

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]

He probado esto también, pero me sale la página.Error interno de servidor 500.

<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>

¿Estoy haciendo algo mal?

Respuesta1

Estoy usando Apache 2.2.3

El<If>La directiva es parte del núcleo de Apache 2.4. Esas directivas causarán un error de servidor 500 si las coloca en 2.2. No está nada claro qué estás intentando hacer, pero puedes reemplazar los <If>bloques con un simple archivo RewriteCond.

El concepto importante aquí es que RewriteCondssólo se aplica a lo inmediatamente siguiente RewriteRuledirectiva, no se aplicarán a ninguna otra, sólo a esa. Por lo tanto, debe duplicar las condiciones si necesita que se apliquen a varias reglas.

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]

Pero puedes deshacerte de todo eso porque puedes redirigir sin usar el http://hostnamebit:

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

Y eso lograría lo anterior para cualquier host.

información relacionada