サーバーによっては、デフォルトでいやらしいNot Foundページを用意し、自社サービスへ呼び込もうとしていることがある。
そんな時は、オリジナルの404ページ(401,403,500等も同様)を作るのが得策。
オリジナル404ページを表示させる一番簡単な方法は、.htaccessに以下の記載をする方法。
ErrorDocument 404 「ドキュメントルートからの相対パス」もしくは「httpから始まる404ページのURL」
以下、それぞれの例。
ErrorDocument 404 /404.html
ErrorDocument 404 http://○○○/404.html
しかし、レンサバの仕様なのかはわからないが、これが効かない場合がある。
そんな時の対処法。
[adsense]
まず .htaccess。
以下のmod_rewriteの記述を加える。
[php]RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . http://○○○/404.html [L][/php]
そして、404用の際に表示させるファイル(上の例では404.html)の最初の行にでも以下の記述を追加。
<?php header( "HTTP/1.1 404 Not Found" ); ?>
とりあえず、自分の環境ではこれでうまくいった。
<<追記:特定アドレス以外からのアクセスをはじく場合>>
例えば、WordPressのログインファイル(wp-login.php)を自分のIPアドレス(下の例では○○○.×××.○○○.×××)からのみアクセス可能にしたい場合。
これも通常は、以下のように.htaccessに記述すればOKなのだが、サーバーによってはエラーになるケースがある。
<Files wp-login.php> Order deny,allow Deny from all Allow from ○○○.×××.○○○.××× </Files>
そういう場合は、以下のmod_rewriteの記載をすれば動く(こともある。動かないサーバーもある)。
[php]RewriteCond %{REQUEST_FILENAME} “wp-login.php”
RewriteCond %{REMOTE_ADDR} !○○○.×××.○○○.×××
RewriteRule . http://○○○/403.html [L]
[/php]
mod_rewriteを使って、IPアドレスではなく、アクセス元のホスト名で制限したい場合のやり方は、残念ながら未だ見つけられず。
2行目を
[php]RewriteCond %{REMOTE_HOST} !xyzxyzxyz.com[/php]
のようにしてあげれば良いかと思いきや、これでは私の環境では動かず。
悩ましい。