5

SERVER_ADDR変数とSERVER_NAME変数が一致しない場合は、ユーザーをリダイレクトする必要があります。

httpd.conf ファイルに次のルールがあります。

RewriteEngine on
RewriteCond %{SERVER_NAME} !%{SERVER_ADDR}
RewriteRule .* /myRedirectPage.html [PT]

SERVER_NAME と SERVER_ADDR が一致しない場合、正しくリダイレ​​クトされます。ただし、一致していてもリダイレクトされます。

次の条件を使用すると、一致するシナリオと一致しないシナリオの両方で機能します: (192.168.1.1 はサーバー IP です)

RewriteCond %{SERVER_NAME} !192.168.1.1

変数が一致するかどうかを確認するために、PHP の変数$_SERVER['SERVER_NAME']$_SERVER['SERVER_ADDR']変数を使用しました。

SERVER_NAME一致する場合にユーザーをリダイレクトしないように、RewriteCond をどのように記述すればよいSERVER_ADDRですか?

4

1 に答える 1

9

RewriteCond の右側でサーバー変数を使用することはできないため"%{SERVER_ADDR}"、変数ではなく文字列リテラルと照合しているため、一致が否定 ("!") されるため、ルールは常に一致します。

この特定の形式を自分で扱ったことはありませんが、次のようなことができると思います。

RewriteCond %{SERVER_NAME},%{SERVER_ADDR} ^(.*),\1

アイデアは、2 つの一致を行っているということです。%{SERVER_NAME}何に対しても一致し (常に一致)、結果をキャプチャして%{SERVER_ADDR}から、最初の一致 ( の一致) への後方参照に対して一致します%{SERVER_NAME}

繰り返しますが、私はそのようなルールを自分で使用したことはありません。それについて読んだだけなので、微調整が必​​要になる場合があります。

于 2013-01-30T22:49:17.423 に答える