2016/02/14
また、ITネタです。
しかも「そんなことする局面ある?」みたいな設定です。
しかし、ありました。
某CMSを利用しているサイトで、CMSサーバと公開サーバが分かれています。
CMSサーバで記事を生成すると、それが公開サーバに同期される仕組みになっています。
問題はそのプレビュー機能にありました。
CMSで作成した記事のプレビューを見る際、プレビューを表示するドメインがCMS向けのドメインではなく、公開向けのドメインになってしまうんです。
なので、プレビューボタンを押下した直後では、CMSから公開サーバへの同期が間に合わず、カスタムの404ページを表示してしまう、というものでした。
で、「カスタムの404を表示したら何が悪いの?」ってところなんですが、そのカスタムの404ページは数秒経つとトップページにリダイレクトされる、というものでこれが嫌なのだそうです。
もう一回、CMSの画面に戻ってプレビューボタンを押下しないといけないので…。
そこで来た依頼が以下でした。
「プレビューに飛んで404になったときは、カスタムの404ページでなくて、apacheデフォルトの何もしない404ページを表示させられない?」
そんな変態的な要望応えられるか?と思ったんですができました。
以下です。
1 2 3 4 5 6 7 8 9 |
<VirtualHost *:80> : ErrorDocument 404 /404.html : <LocationMatch "^/(.*)preview-(.*)\.html$"> ErrorDocument 404 default </LocationMatch> : </VirtualHost> |
プレビューのファイルには規則性があって、preview-********.html になるということなので、これを含むリクエストの場合に、apacheデフォルトの404ページを表示させてます。
上手いことできました。
ErrorDocument 404 default って書くと、デフォルトを表示するとは知らなかった…。
FileMatch とかでもでもいけるのかは調べてません。
まあ、でも、ファイルがない時の処理なわけなんで、LocationMatch が適切なんじゃあないかと。
こんな挙動が必要な局面はそうないと思うんですが、同じような方の手助けになればと思っております。