最近、さくらインターネットで独自ドメインを新規公開する場合、無料SSL(https)で公開するパターンが多くなってきました。(お勧めしているので当然ですけどw)
もちろん、統一URLの正規化をしますが、
その前に忘れていけないのが初期ドメイン=サブドメインです!
通常、さくらインターネットで、独自ドメインを運用すると、
初期ドメイン=サブドメインと、独自ドメインの両方でアクセス可能です(当然、wwwありなし/indexありなし/httpsのSありなし/canonical/の正規化としてデフォ設定します)
そして、マルチドメインで運用しているのに、初期ドメイン経由のディレクトリから、独自ドメインのウェブサイトも表示できます。
まあ、マルチドメインの場合には、制作者が任意でディレクトリを設置するので、ディレクトリ名を知らない一般ユーザーからアクセスしようが無いのですが、検索エンジン(Googleなど)が誤ってインデックスしてしまうと、多くのユーザーがサブドメイン経由でアクセスしてしまう可能性もあります。
これでは、独自ドメイン側を正規化しても、初期ドメインのせいでマイナス効果になりますね。
初期ドメインのルートディレクトリから、.htaccessで、Denyにしておけば403=Forbiddenになるので、簡単だしこれだけでもOKなのですが、(今まではこの403にしていました)
ストーカーのようなユーザーだと、Forbiddenページを見て(自分だけが拒否られたと)逆ギレする例もあるようです・・・
元々何も無かったことにすれば済む話なので、
403ページよりも、404ページにした方が良いでしょう。という方向性です。
ところが、404.cgiを設置し、
ErrorDocument 403 /404.cgiと書いて、404ページに誘導すると、
404が表示されるどころか403で、それもいつもの403と違うw
最後の3行目が、
Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.
つまり、
「あのさぁ、404を指定しているから表示しようとしたら、404自体を拒否ってるからループじゃねーか! アホか」とサーバーが怒っているのです・・・
初期ディレクトリのトップディレクトリ(www)を拒否っているので、そこにある404.ファイルも拒否しちゃっているのです・・・当然の事ですよね、あららぁw
初期ドメインを404表示にする
では、どうすれば良いのか?
404.ファイルだけを除外してallowにするか、
下層にallowのディレクトリを別途作って、404.ファイルを配置する。⇐ これがベターか。
www/.htaccess(A)
/error/.htaccess(B)
/error/404.cgi
- .htaccess(A)は、独自ドメイン以外はdenyにする
つまり、初期ドメインは表示されない。 - .htaccess(B)は、allowにする
つまり、404表示を許可させる。ErrorDocument 403 /error/404.cgi
ErrorDocument 404 /error/404.cgi
これで、初期ドメインへのアクセスが404表示になります。
気にるアクセス時のURL(アドレスバー表示)は、/error/などのディレクトリ名を表示せず、アクセスしたURLで表示されるので、どの下層ディレクトリに設置しても何ら問題ないです(但し、404.htmlファイルだとNGだった筈なので、404.cgiにして内部にErrorDocumentを記述しています)。
それなら別途の/error/を設置せずに、独自ドメインのディレクトリでも良いのですが、独自ドメイン用の独自404を設置するべきなので、この案は却下です(ファイル名を変えれば良いのですが、混同してミスを誘発してしまう可能性もあるから)。
この設定、今後もドメインの初期設定として採用決定です!
注意点は、
ErrorDocument 403 /404.cgiと指定するのはルート違いなので、怒られるw
エラーログにエラーが量産される
エラーログに10分毎にエラーが量産されております・・・
client denied by server configuration:
/home/アカウント名/www/.sakura_notfound.html
client denied by server configuration:
/home/アカウント名/www/.sakura_notfound.html
これは.htaccessに、order deny,allow
deny from all
を利用していたからです・・・
さくらインターネットのApacheでは古い仕様なので、以下に変更です。
Require all granted
同じ意味=同じ動作です。
これで、client denied by server configuration:のエラーログは出なくなりました。
追記:1,order deny,allow deny from allじゃないとNGなサーバがありました・・・
2,さくらインターネットに、何故エラーが出るのか問い合わせたのですが、「このエラーは、何も問題ないので気にしないでください、申し訳ない」という返答を頂きました。その後しばらくして、(放置していたサーバで)エラーが出なくなりました。
コメント