人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Apacheの設定の質問です。Apache1.3.27です。例えば(私のサイトで説明します)http://pasokoma.jp/hajimete.shtml と言うアドレスはhttp://pasokoma.jp/hajimete でも表示されます。これはどこの設定でしているのでしょうか?
別の Apache2.0.40のサーバーで実現をしたいのですが、その設定場所がわかりません。httpd.confを修正すればよいのではと考えています。

●質問者: ウーピーまちゅ。
●カテゴリ:コンピュータ インターネット
✍キーワード:2.0 Apache httpd はと アドレス
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● b-wind
●20ポイント

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...

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

◎質問者からの返答

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

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

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

にはしてあります。


2 ● b-wind
●20ポイント

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 等になってしまいますが。

◎質問者からの返答

ありがとうございます。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が表示されるようにできればそれはそれで解決です。


3 ● ito-yu
●20ポイント

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

mime.typesかhttpd.confで、

text/html html htm

という行を

text/html shtml shtm html htm

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

◎質問者からの返答

やってみます。

ありがとうございます。


4 ● jiangmin
●20ポイント

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

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

◎質問者からの返答

ありがとうございます。


5 ● toohigh
●20ポイント

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

◎質問者からの返答

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ