
404 not foundは、該当するページがない場合に表示される、警告メッセージです。
ホームページ制作では、404が発生しないようにリンクなどに間違いがないか気おつけます。
ですが今回その逆の事例がありました。
サイトを閉鎖するため即座に404 not foundが表示されるようにしたいということでした。
つまり、アクセスされたら強制的に404 not foundを表示させるということです。
普段は404が表示されないように気おつけていますが、強制的に404にするとなると、どうやればできるのかわからないものです。
調べて、強制的に404にする方法を見つけました。
.htaccessで404を表示する
ドメインの有効期限が残っている場合は、何かしらの表示が出ます。
強制的に404を表示させるためには、仕掛けが必要です。
というわけで、仕掛けを探したところ、.htaccessで強制的に404を表示するという方法がありました。
それがこちらです。
例)office-obata.comドメインを強制的に404表示にする
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?office-obata\.com$ [NC]
RewriteRule ^.*$ – [R=404,L]
この記述をした.htaccessを設置すると、強制的に404 not foundが表示されるようになりました。
ちなみにどんな意味なのか?
.htaccessに記述している内容というのは、ルールにのっとっていますが、いまひとつわかりません。
というわけでどういうことなのか調べてみました。
RewriteEngine On
RewriteCondや、RewriteRuleを有効にする指定です。
この記述がないと、RewriteCondや、RewriteRuleは動作しません。
RewriteCond %{HTTP_HOST} ^(www.)?office-obata.com$ [NC]
RewriteCondは、RewriteRuleを実行するための条件指定です。
真(一致する場合)のみRewriteRuleが実行されます。
%{HTTP_HOST}は、アクセス時のドメイン名が代入されます。
例えばoffice-obata.com、www.office-obata.comが入ります。
^(www.)? は、www.が含まれても、含まれていなくてもという実です。
%{HTTP_HOST}の値がwww.office-obata.comでもoffice-obata.comでも一致させるための指定です。
?はひとつ前の文字が0回または1回出現するという意味で、事実上www.があってもなくても一致するという意味です。これがないと、office-obata.comでアクセスした場合は作動しますが、www.office-obata.comでアクセスした場合、作動しなくなります。
()はグループ化という意味で、?はひとつ前の文字ですが、一つ前がグループ化されている場合は、ひとつ前のグループということになります。
\.は.を文字として扱うという意味です。.のままだと任意の一文字(ワイルドカード)という意味になります。.という文字と一致する場合という意味で使用する場合は、\.と表記します。
^(www¥.)?は、文字列先頭がwwwまたは、何もない場合という意味になります。
$は、文字列の最後を意味します。
[NC]は、大文字・小文字の区別をしないという意味になります。
つまり、%{HTTP_HOST} = office-obata.com または %{HTTP_HOST} = www.office-obata.comの場合、RewriteRlueが動作するという意味になります。
RewriteRule ^.*$ – [R=404,L]
^.*$は、先頭から最後まですべての文字という意味です。.はワイルドカードで*は直前の文字を0回繰り返すという意味です。つまり、直前の.(ワイルドカード)を一致するまで繰り返すということになり、事実上すべての文字列と一致するという意味になります。
– はリダイレクトやリライトをしないという意味です。
RewriteRuleは基本的に 「aをbにする」というような意味で使用されます。
今回は404表示にしたいため、入力されたURLなどの文字列を書き換える必要がないため、-を記述します。
[R=404,L]のR=はリダイレクトする内容です。301であれば、指定URLにジャンプします。404であればnot foundを表示します。Lはこれで終了(以降のルールは無視)という意味です。
ここで気になることがありました。
強制的に404を表示することはできたのですが、少し気になる部分がありました。
それは、.htaccessに該当ドメイン名を毎回書くのは、間違えることがありそう。
ということです。
毎回同じ記述をコピーペーストできれば、楽です。
たまにしか使わない記述なので、次回同様のことがあっても、おそらく今回のやり方を忘れています。
ということで、もっと簡単な記述ができないか調べてみました。
次のように記述すると無条件404 not foundになりました。
RewriteEngine On
RewriteRule ^.*$ - [R=404,L]
先ほどの記述から、RewriteCond の行を削除しただけですが、これだけで強制的に404が表示されるようになります。
先ほどの記述との違いは、以下の通りです。
- ドメインに関係なくすべてのアクセスを404にする
先ほどの例だと、office-obata.comや、www.office-obata.comでアクセスされた場合は404が表示されますが、test.office-obata.comというようなサブドメインでアクセスされた場合は404になりません。
完全閉鎖をする場合は、こちらのほうが良いというわけです。
普段は不要だと思われることでも必要になることがあります。
今回は「.htaccess」「404」で検索すると、その大半はオリジナル404ページの設置方法ができてきました。
あえて404にしたいというケースがほとんどないため、解説しているページが皆無に近い感じでした。
確かにあえて404にしたいと思うケースは少ないものです。
今回は、ドメインの有効期限が残っている状態で、一刻も早く検索サイトから消したいという理由で、あえて404を表示するというものでした。
通常は、404にならないように気おつけますが、今回はなにがなんでも404を表示するという真逆の事例でした。不要だと思われる技術も時には必要になることがある。
そんなことを学んだ出来事でした。