Apacheの設定の質問です。Apache1.3.27です。例えば(私のサイトで説明します)http://pasokoma.jp/hajimete.shtml と言うアドレスはhttp://pasokoma.jp/hajimete でも表示されます。これはどこの設定でしているのでしょうか?

別の Apache2.0.40のサーバーで実現をしたいのですが、その設定場所がわかりません。httpd.confを修正すればよいのではと考えています。

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:
  • 終了:2006/09/03 02:50:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440

ポイント20pt

http://01s.info/webtech/content_negotiation

おそらくコンテントネゴシエーションが働いているのでしょう。

本来はブラウザの設定によって別言語を表示するときによく使う機能です。

Apache1.3 と 2.0以降では設定方法が変わっているようですが、

http://httpd.apache.org/docs/2.0/ja/mod/mod_negotiation.html

こちらのモジュールで設定できそうです。

ただ、実際に試せる状況にありませんので可能かどうかは判りません。

http://httpd.apache.org/docs/2.0/ja/mod/mod_mime.html#multiv...

こちらも関係あるかもしれません。

id:pas2

ありがとうございます。ヒントで少し進みました。

このコンテントネゴネーションは有効になっていました。

http://xxx.net/aaa.htmlならばhttp://xxx.net/aaaでアクセスできたからです。

次の問題です。http://xxx.net/aaa.shtmlをアクセスしないのです。ファイル識別子として、.shtmlを探し、.shtm、.html、.htmの順に探すようにさせたいのです。

DirectoryIndex index.shtml index.shtm index.html index.htm index.html.var index.php index.cgi

にはしてあります。

2006/08/28 01:20:07
id:b-wind No.2

回答回数3344ベストアンサー獲得回数440

ポイント20pt

DirectoryIndex はあくまでファイル名を指定しなかった場合のものなので、関係ありません。

コンテントネゴシエーションではファイル識別子の探索順を明示的に指定することは出来ないようです。(言語識別子なら順番指定出来るのですが)

ここは方法をまったく変えて mod_rewrite を使うしかないように思います。

http://www.net-newbie.com/trans/mod_rewrite.html

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} -f

RewriteRule ^/(.*) /$1 [L]

RewriteCond %{REQUEST_FILENAME}.shtml -f

RewriteRule ^/(.*) /$1.shtml [L]

RewriteCond %{REQUEST_FILENAME}.shtm -f

RewriteRule ^/(.*) /$1.shtm [L]

RewriteCond %{REQUEST_FILENAME}.html -f

RewriteRule ^/(.*) /$1.html [L]

RewriteCond %{REQUEST_FILENAME}.htm -f

RewriteRule ^/(.*) /$1.htm [L]

このような設定で可能かと思いますが、テストはしていません。

ただ、個人的には設定が複雑な上、挙動がどうなるか混乱するだけで余りメリットがないようには思います。

いっそ aaa ディレクトリを作成し、その中に index.(shtml|shtm|html|htm)を置く運用ルールにしてはどうでしょうか?

これであれば DirectoryIndex で対応できます。

ただ、元のファイル名でのアクセスは /aaa/index.shtml 等になってしまいますが。

id:pas2

ありがとうございます。mod_rewriteについてはちょっと保留です。それ以外の解決があるのではと期待をします。

http://pasokoma.jp/hajimete.shtml と言うアドレスはhttp://pasokoma.jp/hajimeteでできたと言うことで別サーバーでも簡単にできると踏んだのです。

今回、試みているApache2.0.40では

http://xxx.net/hajimete.shtml と言うアドレスはhttp://xxx.net/hajimeteではアクセスできないが、

http://xxx.net/hajimete.html と言うアドレスはhttp://xxx.net/hajimeteでアクセスできると言う状態です。

質問上、優先順位があるのではと言う質問になってしまいましたが、hajimeteと言うページが1つしかないようにして、hajimete.shtmlが表示されるようにできればそれはそれで解決です。

2006/08/28 03:34:18
id:ito-yu No.3

回答回数323ベストアンサー獲得回数14

ポイント20pt

http://01s.info/webtech/content_negotiation#FILES-TO-PREPARE

mime.typesかhttpd.confで、

text/html html htm

という行を

text/html shtml shtm html htm

と書き換えてapache再起動してみましょう

id:pas2

やってみます。

ありがとうございます。

2006/08/28 12:02:23
id:jiangmin-alt No.4

回答回数125ベストアンサー獲得回数8

ポイント20pt

「Options Multiviews」でOKです。1.3→2.0で変ったのはMultiviewsの振舞いを細かく制御できるようになったことです。

http://q.hatena.ne.jp/1156690225

id:pas2

ありがとうございます。

2006/09/03 02:48:00
id:toohigh No.5

回答回数291ベストアンサー獲得回数37

ポイント20pt

mime.types に .shtml が text/html を要求された際に返す拡張子として定義されているかどうか、がサーバによって挙動が変わった理由かな、と予想します。

apache2 だと、mime.types や httpd.conf 以外でも例えば .htaccess で

AddType text/html .shtml

AddOutputFileter INCLUDES .shtml

・・という感じに設定されていれば大丈夫かと思うのですが、いかがでしょうか。

http://httpd.apache.org/docs/2.0/content-negotiation.html

id:pas2

ありがとうございます。

2006/09/03 02:48:36

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません