• ベストアンサー
  • 困ってます

.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
  • 回答数1
  • 閲覧数10033
  • ありがとう数2

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

  • ベストアンサー
  • 回答No.1

rewriteのサブディレクトリとの関係については http://www.nurs.or.jp/~sug/homep/rewrite/rewrite15.htm#sec3 が参考になるかと思います。 http://oshiete1.goo.ne.jp/qa4083790.html にも同様の質問が有りますが 私の環境でTESTして回答したものの質問者さんのほうではうまくいっていない様子、、

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご返答が遅れましてもうしわけございません。 ご回答下さいましてありがとうございます! 参考のURLを拝見し、結果としてうまく動作しました。 行ったのは、まずサブディレクトリの.htaccessにはRewriteRuleを書かずに、最上層の.htaccessに記載する事でうまくいきました。 その際のRewriteCond %{REQUEST_URI} がポイントでした。 この度は助かりました。本当にありがとうございました。

関連する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ありなしの統一が行えますでしょうか? どうぞご教示の程お願い致します。

  • .htaccessのRewriteRuleエラー

    PHPのフレームワークを使って、サイトを作成しているのですが、 .htaccessの設定でつまずいております。 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php 上記のコードはフレームワークを使う時の お決まりのようなコードなのだと思うのですが、 これはコピペして問題無く動作しております。 ※このコードは下記ページのものをコピペしました。 http://www.yiiframework.com/doc/guide/1.1/ja/topics.url#sec-7 しかし、この既存の.htaccessファイルに下記の通り、 www無しのアクセスをwww有りのurlに転送させるための コードを追加すると、サイト内のリンクが切れてしまいます。 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{HTTP_HOST} ^mydomain.com //これを追加した RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L] //これを追加した RewriteRule . index.php 記述方法が誤っているのだと思うのですが、どのように記述すれば、 正常に動くのでしょうか?

    • ベストアンサー
    • PHP
  • htaccess の rewriterule でカタカナが入っているURLを使いたい

    htaccess の rewriterule でカタカナが入っているURLを 使いたいのですが、htaccessファイルがUTF-8で保存できないため困っています。 wikiフォルダへのrewriteは動作しています。 redirect ではなく rewrite で行いたいです。 何かいい方法がありませんか? ※htaccessサンプル RewriteEngine on RewriteCond %{HTTP_HOST} ^(www\.aaa\.com) RewriteRule ^/?(.*) http://www.aaa.com/wiki/メインページ [R=301,L]

  • .htaccessに複数の条件を書くには

    .htaccessに以下の2つの処理を書きたいのですが、 単純に空行をあけて続けて書いてよいのでしょうか。 これと、  RewriteEngine on  RewriteCond %{HTTP_HOST} ^www\.example\.com  RewriteRule (.*) http://example.com/$1 [R=301,L] これ  Redirect permanent /example/ http://example.com/ この2つを単純に、  RewriteEngine on  RewriteCond %{HTTP_HOST} ^www\.example\.com  RewriteRule (.*) http://example.com/$1 [R=301,L]  Redirect permanent /example/ http://example.com/ のように書いて大丈夫なのかということです。 初歩的な質問ですが、宜しくおねがい致します。

    • ベストアンサー
    • HTML
  • .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は変更してどのくらいで反映されるのか、補足的に教えていただけると助かります。 以上、よろしくお願いいたします。

  • htaccessで静的→動的処理、動的→静的301

    例えば・・・ 以下の処理(【1】と【2】)を.htaccess内で処理したいです。 【1】 http://example.com/1.html ↓ http://example.com/kkk.cgi?mode=main&cno=1 ------------------ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([0-9]+)\.html$ kkk.cgi?mode=main&cno=$1 [L] ------------------ 上記で変換は出来るのですが、これだと静的URLと動的URLで「同じコンテンツが表示(重複ページ扱い=コピーページ扱い)」されます。 やりたいことは、CGIにアクセスすると「301リダイレクトで静的ページを表示する」という仕様にしたいと考えております。尚、パラメータ無しの直接アクセス(kkk.cgi)は、同フォルダのindex.htmlに301リダイレクトできれば最高です。 【2】 http://example.com/kkk.cgi?mode=main&cno=1 ↓301リダイレクト http://example.com/1.html ------------------ RewriteCond %{QUERY_STRING} ^mode=main&cno=(\d+)$ RewriteRule ^kkk\.cgi$ %1\.html? [R=301,L] ------------------ しかし【1】と【2】の処理を同時に行うとループとなります。phpなどを一切使わず、.htaccessの記述だけでこの問題をクリアできる方、何卒ご指導お願いいたします。

  • .htaccessのRewriteRuleの記述

    .htaccessのRewriteRuleの記述方法について質問です。 以下のようなURL移転があったので、RewriteRuleを記述したいのですが、どのように記述すればよろしいでしょうか? 【旧URL】 http://example.com/hoge/hoge.php?id=数字 【新URL】 http://example.com/foo.php?var=1&id=数字 ※数字は対応しています(同じページは同じ数字が入ります)。 なお、私なりにググってみて、以下のように記述したのですが、動きませんでした。 Options +FollowSymLinks RewriteEngine on RewriteRule /hoge/hoge\.php\?(.+) http://example.com/foo.php?var=1&$1 [R=301,L] また、上記のような場合は、そもそもRewriteRuleは適切ではないということであれば、より良い手段をご教示いただきたくお願い申し上げます。

  • htaccessの書き方

    RewriteEngine On RewriteCond %{HTTP_HOST} ^dog.abcd.com$ RewriteCond %{REQUEST_URI} !^/dog/ RewriteRule (.*) /dog/$1 RewriteCond %{HTTP_HOST} ^cat.abcd.com$ RewriteCond %{REQUEST_URI} !^/cat/ RewriteRule (.*) /cat/$1 サブドメインを追加するには上記の記述をhtaccessに記入すればよいとサーバー会社の説明にありましたので、その通りにしました。 ところが、htaccessに設定していないサブドメインにアクセスすると、通常のドメインの内容が表示されてしまいます。 登録ドメインがabcd.comだとして、設定していないサブドメインがtest.abcd.comだとすると、test.abcd.comにアクセスするとabcd.comの内容がそのまま表示されてしまいます。 存在しないサブドメインにアクセスすると全てメインドメインの内容が表示されてしまうのは、検索エンジン対策としても思わしくないように思えます。 出来れば、存在しないサブドメインへのアクセスは404エラーになるようにしたいのですが、方法がわかりません。 htaccessで使われる言語の知識がなくチンプンカンプンなので 適当に以下のような感じでいろいろ試行錯誤していますが、なかなか思うようにいきません。 RewriteEngine On RewriteCond %{HTTP_HOST} ^dog.abcd.com$ RewriteCond %{REQUEST_URI} !^/dog/ RewriteRule (.*) /dog/$1 RewriteCond %{HTTP_HOST} ^abcd.com$ RewriteCond %{REQUEST_URI} !^/ RewriteRule (.*) /$1 RewriteCond %{HTTP_HOST} (ここでabcd.comまたはdog.abcd.com以外のリクエストは)$ RewriteCond %{REQUEST_URI} !^/404/ RewriteRule (.*) /404/$1 を表示させる、としたいのですが、このような命令文はありますでしょうか? どなたかアドバイスいただければ大変助かります。

    • ベストアンサー
    • HTML
  • .htaccess 301リダイレクト

    無知な者で解決できずにおります。 ※カテゴリを変更させて頂きました。 宜しくお願い致します。 現在運営しているホームページ(例>http://example.com)のURL正規化(index.html有り無し)を.htaccessにて行おうと下記のように記述したファイルを設置しました。 Options FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.example\.com ⇒※wwwはなしに統一 RewriteRule (.*) http://example.com/$1 [R=301,L] ⇒※wwwはなしに統一 RewriteCond %{THE_REQUEST} ^.*/index.html    ⇒※index..htmlはなしに統一 RewriteRule ^(.*)index.html$ http://example.com/$1 [R=301,L] ⇒※index..htmlはなしに統一 設置後の解析では一応WWWもindex.htmlも「なしに統一」となっているようなのですが、1つ問題が発生した為、現在はhtaccessファイル内のindex.htmlに関する部分を削除しております。 その問題とは、 http://example.com/index.htmlに「iframe」で記述している営業日カレンダーが表示されなくなってしまうという問題です。 ※表示されない・・・サーバー側が表示する「not foundエラー」がフレーム内に表示さているように見受けられます。 実際に記述しているタグは <iframe src="http://example.com/calendar/calendar.cgi?mode=show" id="calendar" frameborder="0" scrolling="no"></iframe> というものです。 何方かお知恵をお貸しくだされば幸いです。 宜しくお願い致します。

  • htaccess ユーザーエージェント 振り分け 

    htaccess でユーザーエージェント 振り分けを行いました。http://www.example.com/ 以下に htaccessを入れましたが、PCのSEO対策上問題があるでしょうか? RewriteEngine On RewriteCond %{HTTP_USER_AGENT} DoCoMo RewriteRule ^$ http://www.example.com/i/index.html [R] RewriteCond %{HTTP_USER_AGENT} J-PHONE RewriteRule ^$ http://www.example.com/s/index.html [R] RewriteCond %{HTTP_USER_AGENT} Vodafone RewriteRule ^$ http://www.example.com/s/index.html [R] RewriteCond %{HTTP_USER_AGENT} SoftBank RewriteRule ^$ http://www.example.com/s/index.html [R] RewriteCond %{HTTP_USER_AGENT} UP.Browser RewriteRule ^$ http://www.example.com/e/index.html [R]

    • ベストアンサー
    • HTML