強制的に404 not foundを表示する。

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を表示するという真逆の事例でした。不要だと思われる技術も時には必要になることがある。

そんなことを学んだ出来事でした。

今回のレポートは以上です。
読んでいただいてありがとうございました。


ホームページに関するお悩み事やご相談事がございましたら私どもまでご連絡ください。 鋭意ご対応申し上げます。
ホームページのご提案もさせていただいております