
基本的に、ユーザーがイントラネットとインターネット経由でページにアクセスできるようにしたいと考えています。
ユーザーがイントラネット経由でページにアクセスする場合、ブラウザのアドレスバーにサーバーのイントラネットIPを入力すると、192.168.x.x
。
しかし、ユーザーがインターネット経由でページにアクセスすると、サーバーのパブリック IP を入力できるため、URL をサーバーのパブリック IP に書き換えます。
試してみましたが、ページが表示されません適切にリダイレクトされていない。
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]
私もこれを試してみましたが、ページが表示されました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>
何か間違ったことをしているのでしょうか?
答え1
私はApache 2.2.3を使用しています
の<If>
ディレクティブはApache 2.4のコアの一部ですこれらのディレクティブを 2.2 に配置すると、500 サーバー エラーが発生します。何をしようとしているのかまったくわかりませんが、ブロックを<If>
単純な に置き換えることができますRewriteCond
。
ここで重要な概念はRewriteCond
、直後にのみ適用される RewriteRule
ディレクティブを複数指定すると、他のディレクティブには適用されず、そのディレクティブのみに適用されます。したがって、複数のルールに適用する必要がある場合は、条件を複製する必要があります。
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]
しかし、ビットを使用せずにリダイレクトできるため、これらすべてを取り除くことができますhttp://hostname
。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteCond %{REQUEST_METHOD} GET
RewriteRule ^(.*)$ /mypath/$1/ [L,R=301]
これにより、どのホストでも上記を実現できます。