- ベストアンサー
.htaccessを使いエラーが起きたら飛ばす
- Apacheで.htaccessを使いアクセス制限をしようとしています。403エラーが起きたら指定のファイルにリダイレクトするというのを試みていますがうまくいきません。
- .htaccessの意図は拡張子がhtmlとphpのファイルだけにアクセスを許可し、それ以外でアクセスしてきて403エラーが出た場合b.phpにリダイレクトすることです。
- なぜかブラウザでa.phpにアクセスするとErrorDocument 403に引っかかりb.phpに飛んでしまいます。存在するファイルに対してエラーとなるのはなぜでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
記された内容通りにうちのサーバーでテストしてみましたが、 ご希望通りに動きました。 httpd.confかな?
その他の回答 (2)
- tany180sx
- ベストアンサー率63% (239/379)
試してみたけど問題なく。 a.php自体で403が出てるとか、キャッシュとか・・・
補足
>a.php自体で403が出てるとか これってどういう意味でしょうか。 >キャッシュとか・・・ 一応スーパーリロードは試しましたがだめでした。 皆さんはちゃんと動いていて.htaccessにも問題がなさそうということで、ふと思いついていろんなブラウザで試してみました。 なんとfirefoxとsafariとieは問題なくちゃんと動作しました。 私が試していたのはchromeですが、このブラウザだけこの問題が起こるようです。chromeは現時点での最新版(ver22)で、PCはwindowsです。 chromeの持っているユーザーエージェントをsafariに設定してsafariでアクセスしても問題なく動作しました。 そこでchrome絡みのキーワードで検索してみましたら、同じような問題で苦労していた方がいました。 http://piyopiyocs.blog115.fc2.com/blog-entry-47.html この方の結論としてはchromeに問題があるのではないかということでした。 そして解決方法は ErrorDocument の行を削除するというものでした。 私としては403エラー(forbidden)だった場合、やはり別のファイルに飛ばしたいと思っています。(というか事情として必須です。) ただchromeに問題があるとすればこの記事から2年も経っているのに未だに修正されていないというのも不思議です。 尚繰り返しますが、a.phpからb.phpに移るといってもブラウザのURLの表示上は問題はなく変化していません。そうではなくPHPのerror_log関数で出力した内容を確認するとa.phpからb.phpに飛んでいる、というのが問題です。ブラウザはchromeです。 何か回避方法や対策などあればよいのですが。 引き続き皆さんの回答をお待ちしております。
- shimix
- ベストアンサー率54% (865/1590)
denyやallowの記述の前にorderがないのは何故でしょうか。(書かなかったことがないので挙動はわかりませんが)orderが不定なのがマズイのではありませんか。 http://httpd.apache.org/docs/2.0/ja/mod/mod_access.html#order
補足
orderを入れてやってみましたが変化はありませんでした。 ErrorDocument 403 http://xxx.yyy.co.jp/b.php Order Allow,Deny deny from all <Files ~ "\.(html|php)$"> Order Deny,Allow allow from all </Files> 念のため二つのorderに対してAllowとDenyを前後に入れ替えた4つの組み合わせ全てを試しましたが、残念ながらやはりだめでした。
お礼
原因が判明しました。 どうやらchromeだとfaviconにアクセスしているみたいです。 そしてfavicon.icoはdenyの範疇に入っているので403エラーが出てたようです。 皆さんありがとうございました。
補足
すいません、肝心なことを書き忘れていました。 ブラウザ上ではなぜか移動してない、つまりURLが変わっていないように見えるかもしれませんが、error_logで出力した内容を確認すると下記のようにa.phpからb.phpに移っています。 [24-Oct-2012 20:30:00] a [24-Oct-2012 20:30:00] b (但しURLが変わっている場合もあり、ちょっと挙動が不明です) ちなみに環境はレンタルサーバでhttpd.confはどうもいじれないようです。