• 締切済み

【URL統一】 /index.html へのアクセスを /で終わるURLに

以下のサイトは、私が実現したいことの逆の設定をしていると思われます。 http://www.jaccs.co.jp/index.html http://www.jaccs.co.jp/ にアクセスすると、index.htmlつきのアドレスに転送されています 上記の例の逆のように、 http://www.hoge.com/index.html にアクセスされた場合、 http://www.hoge.com/ とさせるには、どのようにすればよいでしょうか? 以下のようなサイトを参考にしたりして、いろいろ調べてみましたが、うまくいかなかったり無限ループになったりしてしまいます。 http://pmakino.jp/tdiary/20061105.html#p02 http://codezine.jp/a/article/aid/1096.aspx おそらく 「mod_rewriteを利用して、URLを書き換える」 というのが、答えにたどりつけそうな手法だと思うのですが、ソースが分かりません。 詳しい方、ご教授お願いします。

みんなの回答

  • cdsdasds
  • ベストアンサー率52% (114/217)
回答No.2

>なるほど!と思い、DirectoryIndexからindex.htmlを除くと、ディレクトリが丸見えになってしまいました。 >なお、index.htmlはトップページで使っていますので、除いちゃうとおかしくなりませんか? だから、そうなるってことはトップページのURLは正しくはhttp://www.hoge.com/index.htmlなんですよね、 とすると、どんなに頑張っても/index.htmlへのアクセスは最終的に/index.htmlに辿りつかせないといけないわけで、それだとループするような気がしますけど。 たとえば、/index.phpというファイルがあって、これが本体で、index.htmlへのアクセスは、一度/へ飛ばされた上で、/index.phpに回されるなら問題はないです。 PHPファイルなら、自分が飛ばされてきたのか、最初に来たのかもわかりますから、/index.php → / → /index.phpでも問題は有りません。 でもhtmlは自分が最初にアクセスされたのか、とばされてきたのかわかりませんから、ページの中に飛ばすコードが書いてあれば/から来た時でも飛ばしますし、書いてなければ、最初にアクセスされた時でも/に飛ばすことはできません。 で、飛ばすのをmod_rerite、.htaccessとかでという話なのでしょうが、.htaccessは飛ばすことしかできないですし、1.3系のmod_reriteは基本的にアクセスされたURLを正規表現でファイル名に書き換えることしかできないので、同一のURLを書き換えることができません。 よって、どう頑張っても/index.html → /→ /index.html→ /→  のループからぬけられないのです。 コードで説明すると RewriteEngine on RewriteCond %{REQUEST_URI} (.*/)index\.html?$ RewriteRule .* %1 [R=301,L] の場合 http://www.hoge.com/index.htmlへアクセスが発生するということはhttpでは get /index.html ってことですよね。これをRewriteCond %{REQUEST_URI}(.*/)index\.html?$ でトラップして、RewriteRule .* %1 [R=301,L]iに従って、Moved Permanentlyでhttp://www.hoge.com/に飛ばします get / となりますよね。 で、質問者の場合、これは/のインデックスを表示しようとして、index.htmlファイルが渡されることになり、 最初に戻るわけです。 2系なら、たぶん/からindex.htmlの際に再度の読み替えを禁止できますから、index.htmlが相手に渡ってめでたしめでたしになると思います。 もっとも、質問者の環境ではそれは無理とのことですし、そもそも共有サーバーで、バーチャルドメインの場合、既にルールが組み込まれていたりしますから、こちらでmod_rewriteや.htaccessをいくら巧みに制御しようとせこせこ書いても、サーバ側が用意したルールにオーバーライトされて結局うまくいかないことが多いです。例えばget /を強制的にget /index.htmlとかに変えたり、その逆をやるような極悪ルールがあったりします。 結局のところ、ループを抜けて、/index.htmlを渡そうとすると、話としては、一度別の/とは関係のないURLへ飛ばして/index.htmlに回送すればいいのですが、それだと、そもそもの目的であった、SEOのために/index.htmlは/に飛ばされるということを示したいという話がグダグダになりますから意味がないわけです。 よって、最初の回答に書いたように http://www.hoge.com/への集約をあきらめhttp://www.hoge.com/index.htmlへの集約を検討する。 とか 冒頭に書いたように本体を http://www.hoge.com/index.php として、index.htmlは単なる飛ばすだけのファイルにするとかいうのはどうですかというはなしになるのです。 個人的には色々やるよりサーバ変えることをお勧めしますし、たぶんそれが早道だと思いますが、そうもいかないのであれば単純なSEOのプロットは修正して、次善の策を考える必要があると思いますが。

全文を見る
すると、全ての回答が全文表示されます。
  • cdsdasds
  • ベストアンサー率52% (114/217)
回答No.1

そもそも、何でそんなことが必要なのでしょう。SEOとかならindex.htmlでまとめるのはどうなんでしょう。そもそもドメインの転送前にやることがあるようにも思いますが。 また、OSはなんですか、サーバソフトは何で、バージョンはいくつでそれは変更可能ですか?、ドメイン名/のディレクトリは完全に質問者の権限の中ですか、サーバでバーチャルドメイン使ってますか?、.htaccessは記述できますか?(管理権限上できるか)、あるいはまたブラウザに制約を付けることはできるのですか(IE6のjavascriptを実行しているものしか考えなくてよいとかできるのか)。PHPとかは使えるのですか? サーバはApacheを想定されているようですが、2系なのか1系なのか、無限ループと言っていますから1系のような気はしますが、その場合だと2系に変更できないか等、細かな記述の仕方をうんぬんする前の解決策があるようにも思います。 とりあえず、1系を考えているのなら、mod_rewriteではなく素直に、ページに細工するか、.httaccessに細工して飛ばすことをかんがえましょう。 無限ループとのことですが、DirectoryIndexからindex.htmlは除いてありますよね。 除いてないと、http://www.hoge.com/index.htmlを渡す、からとぶ→http://www.hoge.com/に転送→http://www.hoge.com/index.htmlを渡す、から飛ぶ→の無限ループになるのはお分かりいただけると思うのですが。 あとは、ご自身が書かれているページに答えは有りますから、書き換えればいいだけだと思いますが。

access443
質問者

補足

>>そもそも、何でそんなことが必要なのでしょう。SEOとかならindex.htmlでまとめるのはどうなんでしょう。 SEO対策です。 トップページが重複して認識されないようにしたいだけです。 作成ソフトで内部ページからトップページにリンクを設定する際、「index.html」と指定してしまう場合があり、その都度絶対URLに直しているのですが、hoge.com/index.htmlへアクセスされたさい、htaccessなどでスラッシュで終わるURLに飛ばせれば便利だなと考えたわけです。 wwwあり、なしのURL統一方法は沢山解説ページがあったのですが、index.htmlへのアクセスを/で終わるURLに統一する方法は見つけることができませんでしたので、ここに質問させていただきました。 >>OSはなんですかサーバソフトは何で、バージョンはいくつでそれは変更可能ですか?、 OS:Linux Apache/1.3.37です。 >>ドメイン名/のディレクトリは完全に質問者の権限の中ですか はい。そうです。 >>サーバでバーチャルドメイン使ってますか? 共有サーバーなので、バーチャルドメインになるとおもいます。 >>.htaccessは記述できますか?(管理権限上できるか) はい、記述できます。 >>あるいはまたブラウザに制約を付けることはできるのですか(IE6のjavascriptを実行しているものしか考えなくてよいとかできるのか)。 ロボットのことばかり考えており、ユーザーのことは頭にありませんでした。 基本的には、ブラウザやJAVAの制限を受けずに転送させたいと思っています。 >>PHPとかは使えるのですか? はい。使えます。 >>サーバはApacheを想定されているようですが、2系なのか1系なのか、無限ループと言っていますから1系のような気はしますが、その場合だと2系に変更できないか等、細かな記述の仕方をうんぬんする前の解決策があるようにも思います。 レンタルサーバーなので、Apacheを2系に変更するということは出来ないとおもいます。 >>とりあえず、1系を考えているのなら、mod_rewriteではなく素直に、ページに細工するか、.httaccessに細工して飛ばすことをかんがえましょう。 理解が足りなかったようです。「mod_rewriteをhtaccessに記述する」といったニュアンスで解釈しておりました。 方法としては、htaccessに記述する方法で解決したいと思っています。 >>無限ループとのことですが、DirectoryIndexからindex.htmlは除いてありますよね。除いてないと、?http://www.hoge.com/index.html?を渡す、からとぶ→?http://www.hoge.com/?に転送→?http://www.hoge.com/index.html?を渡す、から飛ぶ→の無限ループになるのはお分かりいただけると思うのですが。 なるほど!と思い、DirectoryIndexからindex.htmlを除くと、ディレクトリが丸見えになってしまいました。 なお、index.htmlはトップページで使っていますので、除いちゃうとおかしくなりませんか? 結構、簡単な記述で解決できちゃうような気がしているのですが、mod_rewriteのページを読むとどんどん深みにはまっていきます。 RewriteEngine on RewriteCond %{REQUEST_URI} (.*/)index\.html?$ RewriteRule .* %1 [R=301,L] このソースが近いと思っています。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Tomcat6でコンテキスト名を表示せずにアクセス

    Apache2.2、Tomcat6でコンテキスト名を表示せずにアクセスしたいと思っています。 Apache、Tomcat、コンテキストは1:1:1で構築します。 通常アクセス http://hoge.jp/hoge/index.jsp 希望アクセス http://hoge.jp/index.jsp mod_rewriteや、mod_proxy_ajpを使用せずに行う方法はあるのでしょうか。

    • ベストアンサー
    • Java
  • .com/index.htmlを.com/にリダイレクトしたい

    .com/index.htmlにアクセスすると.com/にリダイレクトするようにしたいのですが、.htaccessはどのように記述すればいいのでしょうか? 下記URLのとおりに書いて、「.com/index.html」にアクセスしてもブラウザに表示されているサイトURLは「.com/index.html」のままです。 http://pmakino.jp/tdiary/20061105.html#p02 なぜ「.com/」にしたいかというと、いままでYahooには「.com/」でインデックスされていたのに「.com/index.html」がインデックスされてしまい、かなり検索順位が下がったためです。 よろしくお願いします(サーバーはWebarena Suite2です)。

    • 締切済み
    • PHP
  • index.htmlへのURLの統一

    現在ホームページを管理していますが、ドメイン名.com/とドメイン名.com/index.htmlの両方でアクセスがあります。 いくつかのサイトで、これらは場合によっては検索エンジンによって別ページと認識されてしまう場合があり、統一したほうがいいと書かれていました。 htaccessでindex.html付きに統一したいと思うのですが、色々なワードで検索しても方法が見つかりません。統一すべき、という内容のサイトはいくつも見つかったのですが・・・。 もし統一する方法をご存知の方がいらっしゃいましたら、大変御手数をお掛けしますがご教授いただけたらと思います。よろしく御願いします。

  • index.htmlを省略してくるアクセスをリダイレクトしたい

    index.htmlを省略してくるアクセスをリダイレクトしたい お世話になっております。 ApacheのRedirect機能を持ちいて、 以下のように携帯キャリア毎に用意したindex.htmlファイルを外部サーバへと リダイレクトすることを目論んでいます。 ======================================================================= Redirect permanent /i/index.html http://www.hoge.co.jp/hoge/index.html ======================================================================= ところが、上記のように定義しても、http://www.example.jp/i/という風に、 index.htmlを省略してくるアクセスの場合、 http://www.hoge.co.jp/hoge/index.htmlにリダイレクトさせることができず、 200番の応答コードとともに、http://www.example.jp/i/index.htmlをApacheが返してしまっており 困っております。 http://www.example.jp/i/index.htmlと、 index.htmlを省略せずアクセスした場合には、 ちゃんと、301でhttp://www.hoge.co.jp/hoge/index.htmlへリダイレクトしてくれます。 また、同じApahceで必ずファイル名を省略せずにアクセスしてくるケースに対して、 たとえば、以下のように定義しているのですが、これも期待通りの動作となっております。 ======================================================================= Redirect permanent /i/xxxx.html http://www.hoge.co.jp/hoge/xxxx.html ======================================================================= ファイル名(index.html)を省略してくるアクセスをリダイレクトしたい場合、 どのように定義すれば期待通りの動作が得られるでしょうか。 リダイレクトの仕方は、ApacheのRedirectにこだわっていませんので、 何か実現可能な方法がありましたらどなたか教えて頂けますと大変助かります。 よろしくお願いいたします。

  • 短縮URL(redirectでなく)を設定したい

    短縮URL(redirectでなく)を設定したい http://example.com/半角英数字 みたいな短縮URLにアクセスすると、 URLがそのままで(つまりredirectではなく)、ページを閲覧できる方法はどうすればいいのでしょうか? mod_rewriteを使うということはわかっています。 共用サーバですが、mod_rewrite使えます (逆に、mod_redirectは使えません) ですが、どうもうまくいかなく・・・。 http://example.com/?半角英数字 ならなんてことないのですが・・・。 なお、LAMPです。 よろしくお願い申し上げます。

  • mod_rewriteによるURLの書き換え

    mod_rewriteを使ってURLの書き換えを行いたいのですが、どうしてもうまくいきません…。 http://***.main.jp/rewrite/name/index.shtml?total=num にアクセスされた場合に http://***.main.jp/rewrite/php.php?title=name?total=num に切り替えて処理させたいと思っています。 .htaccessには RewriteEngine on RewriteRule ^(.*)/index\.shtml\?total=([0-9]*)$ rewrite/php.php?title=$1&total=$2 このように記述したのですが、書き換えが行われずにindex.shtmlの内容が表示されてしまいます。 どうか、ご教授いただけませんでしょうか? サーバーはロリポップを使用しています。

  • 静的URL変換について

    現在,phpでウェブサイトを作成しているのですが、 サイト内検索をしたときのURLを静的化できないか、考えております 例)getで送った際のURL hoge.com/search.php?keyword=hoge 修正後 hoge.com/kewyword_hoge.php そして、その際にやりたいことは、hoge.com/kewyword_hoge.phpをインデックスさせ このURLのページにアクセスしてきたときにhoge.com/search.php?keyword=hogeを 実行するようにしたいのですが、これって可能でしょうか? 静的URL変換自体は問題ないのですが、 hoge.com/kewyword_hoge.phpにアクセスしてもhoge.com/search.php?keyword=hoge を実行してくれず困っております。 恐れ入りますが、解決策をご教授いただけませんでしょうか? 何卒宜しくお願いします。 また、私のやりたいことは以下のサイトで参考になります。 ■インデックスされているURL(google) http://j-sen.jp/kanto/keyword_%E3%81%86%E3%81%A9%E3%82%93.htm ■サイト内検索のURL http://j-sen.jp/search/?area=kanto&nmin%5Bname%5D=&nmin%5Btime%5D=&nmin%5Bn%5D=&wage=&freeword=%E3%81%86%E3%81%A9%E3%82%93&day=&hour=&feature%5B%5D=&feature%5B%5D=&medical=1&except_medical=0&x=82&y=22 どちらも検索結果は同じですが、サイト内検索のURLを静的化し、 google先生にインデックスさせています。 お手数ですが、改めて解決策のご教授お願い申し上げます。

    • 締切済み
    • PHP
  • アクセス制限による携帯サイトのクローラー対策について

    http://xxx.jp というサイトを携帯用に作成しています。 PCからは閲覧されたくないため、まず http://xxx.jp/index.htmlには、「このサイトは携帯専用です。ドコモはhttp://xxx.jp/i/index.htmlへ。ソフトバンクはhttp://xxx.jp/s/index.htmlへ。auはhttp://xxx.jp/e/index.htmlへ」とリンクによる表記をしました。 .htaccessのmod_rewriteによるIPの振り分けで、PCからのアクセスはhttp://xxx.jp。ドコモからのアクセスはhttp://xxx.jp/i/index.html。ソフトバンクからのアクセスはhttp://xxx.jp/s/index.html。auからのアクセスはhttp://xxx.jp/e/index.htmlへと振り分けました。 しかし、このままでは、PCから直接http://xxx.jp/i/index.html、http://xxx.jp/s/index.html、http://xxx.jp/e/index.htmlへアクセスすると、見えてしまいます。なので、iの階層には、.htaccessでドコモ以外のIPアドレスを拒否。sの階層には、.htaccessでソフトバンク以外のIPアドレスを拒否。eの階層には、.htaccessでau以外のIPアドレスを拒否しました。 しかし、これでは携帯のクローラーもはじいてしまいます。 そこで、クローラーはIPの許可をしたいのですが、いまいちどのようにしたらいいのかわからないのです。 たとえば、クローラーがhttp://xxx.jpにアクセスしてきたとします。 そしたら、上記の設定より、http://xxx.jpの画面を解析するわけです。 このとき、.htaccessかmod_rewriteを使って、うまくクローラーをそれぞれの携帯サイトに誘導する手はないでしょうか? また、マッタク違った方法でのアドバイスもございましたら、教えていただけると幸いです。 どうかよろしくお願い致します。

  • htaccess.サブディレクトリURL非表示

    お世話になります。 以下のようなサイトがあるとします。 http://hoge.com/index.php ←ログインフォーム http://hoge.com/aaa/index.php ←会員用サイト http://hoge.com/bbb/index.php ←非会員用サイト 最初のアクセスは必ず/index.phpが受け取り、ログイン判定後/aaaか/bbbにリダイレクトします。この時に、aaaやbbbをURLに表示させない方法はあるのでしょうか。 よろしくお願いいたします。

  • www付き・なしのURL統一について

    運営しているサイトのwwwwありとwwwなしのURLの統一をする事にしました。 ホームページで検索した所htaccsessで実現できることが判明し、 説明ページを参考に以下のように設定しました。 RewriteEngine on RewriteCond %{HTTP_HOST} ^(www\.hogehoge\.jp)(:80)? RewriteRule ^(.*) http://hogehoge.jp/$1 [R=301,L] これにより http://www.hogehoge.jp/へのアクセスは http://hogehoge.jp/にリダイレクトされるようになったのですが ディレクトリ以下のwww付きURLにアクセスすると なぜかトップへリダイレクトされるようになりました。 例: http://www.hogehoge.jp/fugafuga/index.phpへアクセスすると http://www.hogehoge.jp/index.phpにジャンプします これは何か設定が間違っているということなのでしょうか? ご存知の方がいましたらご回答よろしくお願い致します。