- 締切済み
htaccessにてディレクトリ以下を転送する場合
.htaccessにてディレクトリ以下をそのディレクトリ下にある特定ファイルに転送する場合 どういう書き方をすればよいのでしょうか? *dlディレクトリ以下にアクセスした場合、/dl/failed.htmlに転送したい。 Redirect permanent /dl/ /dl/failed.html とした場合、ループになります。(当たり前ですが)
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- dscripty
- ベストアンサー率51% (166/325)
↓のページの Redirect Directive の説明を読むとわかると思うけど、 mod_alias - Apache HTTP Server http://httpd.apache.org/docs/2.2/en/mod/mod_alias.html#Redirect http://httpd.apache.org/docs/2.2/ja/mod/mod_alias.html#Redirect (日本語訳はまだ完成してないのかな?) Redirect の機能を誤解してる気がする。 | Redirect permanent /dl/ /dl/failed.html と書いた場合、 http://example.com/dl/somedir/index.html ↑へのリクエストは、↓には転送されないよ。 http://example.com/dl/failed.html 実際に転送される先は、↓こっち。 http://example.com/dl/failed.html/somedir/index.html 結局ループするから同じだけどね。 RedirectMatch Directive を使えばできると思うけど、 http://httpd.apache.org/docs/2.2/en/mod/mod_alias.html#RedirectMatch http://httpd.apache.org/docs/2.2/ja/mod/mod_alias.html#RedirectMatch 実用上、質問のようなディレクトリ構成が必要なことってないとおもう。 /failed.html にリダイレクト先のファイルを置いて、 /dl/ ディレクトリ以下にアクセスしてきたときに、 /failed.html にリダイレクトさせれば、 ループのことを考える必要ないし簡単だし素直かな? 上のようなディレクトリ構成なら↓(テストしてないから間違ってるかも) RedirectMatch permanent /dl/.* http://example.com/failed.html でも、こういった、ある特定のフォルダにアクセスされたくないときは、permanent(301 ステータス) は使わないし、 http://ja.wikipedia.org/wiki/HTTP%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89 Redirect も使ったりしないよ? もしするなら <FilesMatch> Directive を使って、 http://httpd.apache.org/docs/2.2/en/mod/core.html#filesmatch http://httpd.apache.org/docs/2.2/ja/mod/core.html#filesmatch /dl/.htaccess に↓(テストしてないから間違ってるかも) ErrorDocument 403 /failed.html <FilesMatch *> Order allow,deny Deny from all </FilesMatch> でいいと思う。