リダイレクト設定について

このQ&Aのポイント
  • 下層ディレクトリへのリダイレクトについて調べた結果
  • 「.htaccess」を使用して、特定のURLを別のURLにリダイレクトさせる方法について教えてください
  • 具体的なリダイレクト設定として、haru.com/natu/12.htmlをharu.com/natu/aki/12.htmlに、haru.com/natu/13.htmlをharu.com/natu/huyu/13.htmlにリダイレクトする方法について教えてください
回答を見る
  • ベストアンサー

下層ディレクトリへのリダイレクトについて

リダイレクトをしたくて、調べた結果 これで、いいのかどうか教えていただきたいのですが よろしくお願いいたします。 (「.htaccess」のことが全く分かっていません) サーバーはエックスサーバーです。 下記のように haru.com/の「natu」というフォルダに入っているファイルを 「aki」「huyu」というカテゴリを作り、そこに振り分けたいのです haru.com/natu/12.html → haru.com/natu/aki/12.html haru.com/natu/13.html → haru.com/natu/huyu/13.html haru.com/natu/14.html → haru.com/natu/aki/14.html haru.com/natu/15.html → haru.com/natu/aki/15.html haru.com/natu/16.html → haru.com/natu/huyu/16.html haru.com/natu/17.html → haru.com/natu/huyu/17.html 「.htaccess」の書き方は以下のようになるのでしょうか? カテゴリ(ディレクトリー)とファイルの関連性がないので 一つ一つ書かなくてはいけないのかなと思ったのですが・・・間違いでしょうか? RewriteEngine on RewriteBase /natu RewriteCond %{REQUEST_URI} !/natu/aki/.* RewriteRule (.*) http://haru.com/natu/aki/12.html [L,R=301,NE] RewriteRule (.*) http://haru.com/natu/aki/14.html [L,R=301,NE] RewriteRule (.*) http://haru.com/natu/aki/15.html [L,R=301,NE] RewriteRule (.*) http://haru.com/natu/huyu/13.html [L,R=301,NE] RewriteRule (.*) http://haru.com/natu/huyu/16.html [L,R=301,NE] RewriteRule (.*) http://haru.com/natu/huyu/17.html [L,R=301,NE] そして、このように作った「.htaccess」を設置するのは下記の図の場所でいいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

転送先に法則性がないならば地道に書いていく方が無難だろうね。 RewriteEngine On ・・・(1) RewriteBase /natu ・・・(2) RewriteRule ^12\.html$ aki/12.html [L,R=301,NE] ・・・(3) RewriteRule ^14\.html$ aki/14.html [L,R=301,NE] RewriteRule ^15\.html$ aki/15.html [L,R=301,NE] RewriteRule ^13\.html$ huyu/13.html [L,R=301,NE] RewriteRule ^16\.html$ huyu/16.html [L,R=301,NE] RewriteRule ^17\.html$ huyu/17.html [L,R=301,NE] (1)Rewrite系のディレクティブを有効にする(httpd.conf側でAllowOverrideの設定が必要)。 (2)書き換え後のパス(RewriteRuleの第2引数)が相対パス(スラッシュで始まらない)だった時に付与するプレフィックス。書き換え前の内容は一切関係ない。 (3)アクセスしてきたパスが/natu/12.htmlだった場合(先頭の^は正規表現の冒頭にマッチする、/12\.htmlは文字通り12.htmlにマッチする、最後の$は正規表現の末尾にマッチする、/natuが暗黙で付与されるのは.htaccessが/natuの中にあるから)、/natu/aki/12.htmlにリダイレクトして(第3引数のR=301)、ここでRewrite終了(第3引数のL)、書き換え後のURLにURLエスケープを用いない(第3引数のNEだが今回正直これ要らない)。 まぁ全部これを書くというのも面倒なのでRewriteRuleの代わりにRewriteMapというディレクティブも興味があったら調べてみるといい。だが基本はRewriteCondとRewriteRuleの書き方と意味をしっかり押さえるのが重要だ。 .htaccessの置き場所はそれでいいです。

hukitoma
質問者

お礼

anmochi さま とても、詳しい説明をありがとうございました。 1行1行の意味を分かりやすく説明してくださって感謝です。 難しい言葉とかもありますが、それは調べてみます。 RewriteMapというのも調べてみます。 ありがとうございます。 上手くいったら、ご報告いたします!!!

hukitoma
質問者

補足

anmochi さま 先日は、ご丁寧な回答をありがとうございました。 お陰様で、ちゃんと出来ました。 実は、全部で53個も変換があったので、何とかRewriteMapというものを理解できないか 調べていたのですが、ちょっと私には難しすぎました。 それで、53個書き出して、成功です!! 本当にありがとうございました。 RewriteCondとRewriteRuleの書き方と意味をしっかり勉強します。

関連するQ&A

  • 下層ディレクトリのwwwあり・なしの統一について

    お世話になります。 現在.htaccessを利用し、利用中のURLのwwwあり・なしの設定を行い、 www.hoge.comへのアクセスをhoge.comへ統一させる事に成功致しました。 ですがwww.hoge.com/foo/へのアクセスがhoge.com/foo/に統一されず、困っております。 ドメイントップ内.htaccessにて以下の様に表記を行っております。 RewriteEngine on RewriteCond %{HTTP_HOST} ^(www\.hoge\.com)(:80)? RewriteRule (.*) http://hoge.com/$1 [R=301,L] これに、 RewriteCond %{HTTP_HOST} ^(www\.hoge\.com/foo/)(:80)? RewriteRule (.*) http://hoge.com/foo/$1 [R=301,L] 等加えてみましたがどうも思う様にいきません。 /foo/直下に.htaccessを置き試してみましたが統一されないままです。 現在さくらインターネットのレンタルサーバにて設置作業を行っております。 どの様にすれば下層ディレクトリでのwwwありなしの統一が行えますでしょうか? どうぞご教示の程お願い致します。

  • httpからhttpsへのリダイレクト方法

    すいません、よくわかりませんので教えて下さい。.htaccessに記述してhttpにアクセス来たものをhttpsへリダイレクトしたいです。 今の状況は下記です。 AddHandler application/x-httpd-php53 .php RewriteEngine On # Main RewriteRule for multidomain. RewriteCond %{HTTP_HOST} ^(sanetsu.com) RewriteCond %{REQUEST_URI} !^/(sanetsu.com)/ RewriteRule ^(.*)$ http://www.sanetsu.com/$1 [L] # Main RewriteRule for multidomain. RewriteCond %{HTTP_HOST} ^(www.burikama.com) RewriteCond %{REQUEST_URI} !^/(www.burikama.com)/ RewriteRule ^(.*)$ /%{HTTP_HOST}/$1/ [L] # Main RewriteRule for multidomain. RewriteCond %{HTTP_HOST} ^(burikama.com) RewriteCond %{REQUEST_URI} !^/(burikama.com)/ RewriteRule ^(.*)$ http://www.burikama.com/$1 [L] # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress すいません、上記の記述をどのように変更したらhttpsへリダイレクトさせることができますでしょうか?前任のweb担当の方と連絡が付かないので教えていただけたらありがたいです。 宜しくお願い致します。

    • ベストアンサー
    • HTML
  • 301リダイレクトの例外処理

    WEBサイト全体に 拡張子がhtmとhtmlが混在していて管理がわずらわしいので、 .htaccessで下記のような設定をしました。 ドメイン直下に.htaccessを置いているので、サイト全体でこの設定が有効に なっているのですが、あるフォルダだけこれが適用されないように 設定をしたいと思います。 いろいろやってみたのですが、今ひとつ正常に動いてくれません。 どのようにすればいいのでしょうか。 -------------------------------------------------------------- Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^XXX.jp RewriteRule ^(.*)$ http://www.XXX.jp/$1 [R=301,L] Options +FollowSymLinks RewriteEngine on RewriteCond %{THE_REQUEST} ^.*/index.html RewriteRule ^(.*)index.html$ http://www.XXX.jp/$1 [R=301,L] Options +FollowSymLinks RewriteEngine on RewriteCond %{THE_REQUEST} ^.*/index.htm RewriteRule ^(.*)index.htm$ http://www.XXX.jp/$1 [R=301,L] -------------------------------------------------------------- サーバーはApache/1.3.42 .htaccessファイルを置いているのは、ドメイン直下です。

  • SSLのリダイレクトについて

    sslのリダイレクトの作業を急いでやらないといけないのですが、sslに関しては全くの初心者なので調べながらいろいろやってみましたがどうしてもうまくいかず困っています。。 Wordpressでサイトを作成していてドメイン直下の.htaccessにリダイレクトの記述をしています。 サーバーはGMOのiCLUSTAで、sslはジオトラストです。 http://○○○.jp/ にアクセスした場合に、 https://ssl.○○○.jp/ へリダイレクトされるようにしたいです。 .htaccessの記述内容です # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress RewriteEngine on RewriteCond %{HTTPS} on RewriteRule ^(.*)$ https://ssl.○○○.jp/$1 [R=301,L] この記述をしていますが、リダイレクトされたりされなかったりの不安定な状態です。 されないことの方が多いのでどの条件で動いているのかがわかりません。 RewriteCond %{HTTPS} on を、 RewriteCond %{HTTPS} off にするとリダイレクトされますが、処理がループされていますという表示が出てしまいます。 どのような記述をすればうまくいくのでしょうか?

  • .htaccessでリダイレクトしたいです@さくら

    .htaccessでwwwなしのサイトにリダイレクトをかけたいのですが、うまくいきません。 色んな方法がサイトにありそれを試しているのですが、 一瞬テストでうまくいったと思ったのですが、それ以降うまくいかなくなってしまいました。 使用しているプロバイダはさくらインターネットです。 今までに試したコマンドは下記です。 --------------------------- <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} ^(www.hoge\.com)(:80)? RewriteRule ^(.*) http://hoge.com/$1 [R=301,L] </IfModule> --------------------------- RewriteEngine on RewriteCond %{HTTP_HOST} www¥.hoge¥.com RewriteRule .* http://hoge.com%{REQUEST_URI} [R=301,L] --------------------------- .htaccess を設置しているディレクトリは /home/hoge/www になります。 ぜひ教えていただけないでしょうか。よろしくお願いいたします。 また、.htaccessは変更してどのくらいで反映されるのか、補足的に教えていただけると助かります。 以上、よろしくお願いいたします。

  • 301リダイレクトの設定について

    「○○○.jp」と「www.○○○.jp」を統一し、どちらのURLからの アクセスでも「○○○.jp」ディレクトリ内のコンテンツが 表示されるように設定したいと考えております。 契約しておりますレンタルサーバ会社では.htaccessファイルの 編集内容についてはサポートしておらず、ネット上で設定方法を 検索して試みておりますが、アクセスすると403のエラーが表示され 上手くいっておりません。 以下に.htaccessの設定内容をとエラーの状況を記載いたします。 Webサーバの運用については知識が皆無の為、非常に難儀しております。 不備があればご指摘いただき、またその他の設定等での不具合の 可能性があれば、それもご教示いただけませんでしょうか。 宜しくお願い申し上げます。 ---------------------------------------------------------------- # Enable RewriteEngine. RewriteEngine On # Main RewriteRule for multidomain. RewriteCond %{HTTP_HOST} ^(◆◆◆.jp|▲▲▲.com|■■■.com|◇◇◇.com|○○○.jp|www.○○○.jp) RewriteCond %{REQUEST_URI} !^/(◆◆◆.jp|▲▲▲.com|■■■.com|◇◇◇.com|○○○.jp|www.○○○.jp)/ RewriteRule ^(.*)$ /%{HTTP_HOST}/$1/ [L] Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^www.○○○\.jp RewriteRule ^(.*)$ http://○○○.jp/$1 [R=301,L] ----------------------------------------------------------------

  • HTTPSへの強制リダイレクトについて

    質問です。さくらレンタルサーバで.htaccessで RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R] or RewriteCond %{HTTPS} on RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L] にしてもリダイレクトループが起きてしまい、強制的にhttpsにする事が出来ません。 例としてドメインを abc.jp として http://abc.jp/ (wwwはなし)で接続した時に httpsに移すという物ですが、さくらレンタルサーバでは、なぜかループしてしまいます。 どうすれば強制化出来るでしょうか。また.htaccess以外にも方法がありましたら お教え下さい。

  • htaccessのリダイレクト記述

    .htaccess リダイレクトについて教えてください。 今まで、WordPressをサブドメインで使っていましたが、新しいドメインに移転します。 今までのURLは、http://old.com/wp/ 新しいURLは、http://new.com となります。 それぞれの記事が検索エンジンに掲載されいますので、それぞれの記事がリダイレクトでそれぞれの記事を表示することが希望です。下記の記述で正しいでしょうか? RewriteEngine on RewriteBase /old.com/wp/ RewriteRule ^$ http://new.com/ [R=301,L] RewriteRule ^(.+)$ http://new.com/$1 [R=301,L] 宜しくお願いいたします。

    • ベストアンサー
    • HTML
  • ハッスルサーバーでの301リダイレクト設定について

    ハッスルサーバーにてサイトを運営している者です。 http://www.abc.com/ と http://abc.com/ どちらのページも閲覧できてしまう為、これを 「www」有りに統一したく、「.htaccess」を使用して 301リダイレクトを試みておりますが、実際に「.htaccess」を アップロードすると、www有り無し両方とも500サーバーエラーと なってしまいます。 記述は下記に習いました↓ RewriteEngine on RewriteCond %{HTTP_HOST} ^hogehoge¥.com ←注意:左記のエンマークは半角にして下さい。 RewriteRule (.*) http://www.hogehoge.com/$1 [R=301,L] ご教授くださいませ。よろしくお願いします。

  • .htaccessでのRewriteRuleが下層ディレクトリに効かない

    現在一番上の階層にドメインを適用しており、そこでwww有りと無しを統一する為、.htaccessに以下のように記述しています。 RewriteEngine on RewriteCond %{HTTP_HOST} ^(www\.example\.com)(:80)? RewriteRule ^(.*) http://example.com/$1 [R=301,L] これで、http://www.example.com/ は http://example.com へ、 下層ディレクトリの http://www.example.com/sample/ は http://example.com/sample/ と、 上記のようにリダイレクトしてくれますが、下層ディレクトリの中に掲示板スクリプトを設置しているものがありまして、 そのディレクトリ(/bbs)の中にも、スクリプトのURL書き換えの為のRewriteRuleを記述した.htaccessを設置しています。 ※このディレクトリ(/bbs)のRewriteRuleには、RewriteCond %{HTTP_HOST} は記述していません。 ここで困った事に、http://www.example.com/bbs/ にアクセスすると、そのままwwwが付いたURLがそのままアドレスバーに表示され、 www無し(http://example.com/bbs/)にリダイレクトしてくれません。 .htaccessを設置していない(RewriteRuleを記述していない)下層ディレクトリは、上層ディレクトリに記述しているRewriteRuleの継承をしてくれる為、http://example.com/sample/ のように表示(リダイレクト)されますが、上記の/bbs ディレクトリなどに対しても、上層のRewriteRule を引き継げる方法は無いでしょうか? 色々調べて、RewriteOptions inherit というのも見つけたのですが、/bbs ディレクトリの.htaccessに記述しても、 トップページ(http://example.com/)へリダイレクトされてしまい、どうすれば良いか悩んでおります。 環境は共用レンタルサーバで、 Apacheのバージョンは1.3.39 (Unix)。 httpd.confは自分では設定する事が出来ません。 上層ディレクトリのRewriteRuleを引き継げない場合、/bbs ディレクトリの.htaccessにはどのように記述すれば www無し(http://example.com/bbs/)になるのかでも勿論構いません。 もし良い方法がありましたらご教示頂けますと幸いです。 宜しくお願いいたします。

    • ベストアンサー
    • CGI