htaccessを使って、サブフォルダをルートディレクトリに

設定はできないものでしょうか?
( レンタルサーバで直接Apacheの変更はできないようです )

知り合いが勤める会社の、とても悲惨な開発環境を
なんとか解決してあげたいのです。

約500ページあるサイトを作ったそうなのですが、
まずページ毎に相対パスがバラバラ
( ../img/jpg や /aaa/img/jpg)だそうです。

さらにテストサーバは、1つのドメインに
サブフォルダをつくって確認しているそうです。

http://xxxx.com/abc/

これでは、ルートパスが http://xxxx.com/ なため、
全ページをテストサーバ用に、パスの前に /abc/ を
手動で付け足しているようなのです。恐ろしいことに。。

せめてその作業だけでもなんとかできれば、
かなりの貢献になると思います。

何か他に解決できそうなアイデアがあれば
是非教えてください。よろしくお願いします。

回答の条件
  • 1人1回まで
  • 登録:2009/11/19 18:12:37
  • 終了:2009/11/21 01:27:31

ベストアンサー

id:rouge_2008 No.4

rouge_2008回答回数594ベストアンサー獲得回数3512009/11/21 01:05:26

ポイント90pt

ありがとうございます。

お言葉に甘えて回答欄に記載させていただきます。

1.次の「.htaccess」をルートディレクトリに設置する。

RewriteEngine On
RewriteBase /

RewriteRule ^/?img/(gif|jpg|png)/([A-z0-9_-]+\.(?:gif|jpeg|jpg|png))$ /abc/img/$1/$2 [L]
RewriteRule ^/?(css|js)/([A-z0-9_-]+\.(?:css|js))$ /abc/$1/$2 [L]
RewriteRule ^/?((?:[A-z0-9/_-]+)(?:\.(?:html|htm)?))$ /abc/$1 [L]

※「.htaccess」の記述はコメントと同じです。

2.パスの前に 手動で足した「/abc」を削除する。

(※「./~」や「../~」、「/img/~」等のパスはそのままにします。

>まずページ毎に相対パスがバラバラ

( ../img/jpg や /aaa/img/jpg)だそうです。

上記の「/aaa/img/jpg」が不明なのですが、ルート直下の他のサブフォルダの画像を呼び出している場合は、画像をルート直下のサブフォルダabc内の画像フォルダに移動して、パスを「/img/jpg/~」等、ルートからの正しい相対パスに変更してください。

3.最後に、パスの前に 手動で足した「/abc」を削除します。


後は、今後の対策としてテスト用レンタルサーバの乗り換えを提案してみてはいかがでしょうか?

現在お使いのサーバーがマルチドメインに対応している場合は乗り換える必要はありませんが、もし対応していない場合は、さくらのレンタルサーバーがおすすめです。

PHPが動作しなくてもいいのでしたら、ライトプランでも十分だと思います。

http://www.sakura.ne.jp/function/matrix.html

さくらの初期ドメインを含めて、合計20個まで設定できます。

http://faq.sakura.ad.jp/faq/1032/app/servlet/qadoc?000416


独自ドメインの追加方法

さくらインターネットで取得した独自ドメインを利用する

※他社で取得した場合は、他社で取得した独自ドメインを利用するを参考にしてください。

ドメインの追加が済んだら、マルチドメインの設定をします。

マルチドメインの設定

※HP作成の契約締結の時点でサブドメインを追加して、サブフォルダにマルチドメインを割り当てておくと、時間をロスせずスムーズにいくと思います。


もちろん、今後は相対パスをルートからの相対パスに統一する必要はありますが、マルチドメインで運用した場合は、上記のような「.htaccess」を設置する必要がなくなります。

テスト用サーバーという事ですので、「.htaccess」で対処しても問題ありませんが、マルチドメインでテストするのも一つの方法だと思います。

※ただし、「.htaccess」で対処する場合、このケースでは対応できるのは一つのサイト(サブフォルダ)だけです。

サイトごとに「xximg」「yyimg」「xxcss」「yycss」等と、画像やCSSのフォルダ名を別にする場合は、2つ以上のサイトに対処可能ですが、HTMLのフォルダまで分けるのは困難だと思います・・・

その他の回答(4件)

id:azumi1975 No.1

azumi1975回答回数337ベストアンサー獲得回数162009/11/19 18:59:34

id:yossuys

ありがとうございます。

2009/11/19 19:42:49
id:goog20090901 No.2

goog20090901回答回数637ベストアンサー獲得回数172009/11/19 19:12:02

ルールとして、絶対パスで書くことにして、

完成後に置換ですね。

id:yossuys

ありがとうございます。

それができていれば質問はしていません。

2009/11/19 19:43:21
id:azuco1975 No.3

azuco1975回答回数613ベストアンサー獲得回数162009/11/19 19:57:12

>問題は相対パスの書き方がバラバラに書かれていて、

>置換できないからだそうです。

きちんとパターンわけしてルールを決めれば98%は出来ると思います。

残りの2%は、テストフェースで検出するしかないと思います。

Redirectをつかうとしても現状のあやふやさをみると、失敗すると思います。

最終的には、実際の運用環境でテストするんですよね?

テストしないとかですか?

id:yossuys

ありがとうございます。

確かに正規表現を使うなどして数パターンにわければ

ほとんど置換できるとは思います。

が、僕がそこまで踏み込みたくはありません。

htaccessやApacheの設定について僕は詳しくないので、

知り合いがわかる範囲で、こうすれば簡単にできるらしい、

と教えてあげられればという感じでした。

テスト環境については、テスト環境自体が通じないレベルです。

システムはまったく使っていなくて、ローカル上でHTMLを

ブラウザにドロップしてチェックしているような環境だそうです。

2009/11/19 20:13:11
id:rouge_2008 No.4

rouge_2008回答回数594ベストアンサー獲得回数3512009/11/21 01:05:26ここでベストアンサー

ポイント90pt

ありがとうございます。

お言葉に甘えて回答欄に記載させていただきます。

1.次の「.htaccess」をルートディレクトリに設置する。

RewriteEngine On
RewriteBase /

RewriteRule ^/?img/(gif|jpg|png)/([A-z0-9_-]+\.(?:gif|jpeg|jpg|png))$ /abc/img/$1/$2 [L]
RewriteRule ^/?(css|js)/([A-z0-9_-]+\.(?:css|js))$ /abc/$1/$2 [L]
RewriteRule ^/?((?:[A-z0-9/_-]+)(?:\.(?:html|htm)?))$ /abc/$1 [L]

※「.htaccess」の記述はコメントと同じです。

2.パスの前に 手動で足した「/abc」を削除する。

(※「./~」や「../~」、「/img/~」等のパスはそのままにします。

>まずページ毎に相対パスがバラバラ

( ../img/jpg や /aaa/img/jpg)だそうです。

上記の「/aaa/img/jpg」が不明なのですが、ルート直下の他のサブフォルダの画像を呼び出している場合は、画像をルート直下のサブフォルダabc内の画像フォルダに移動して、パスを「/img/jpg/~」等、ルートからの正しい相対パスに変更してください。

3.最後に、パスの前に 手動で足した「/abc」を削除します。


後は、今後の対策としてテスト用レンタルサーバの乗り換えを提案してみてはいかがでしょうか?

現在お使いのサーバーがマルチドメインに対応している場合は乗り換える必要はありませんが、もし対応していない場合は、さくらのレンタルサーバーがおすすめです。

PHPが動作しなくてもいいのでしたら、ライトプランでも十分だと思います。

http://www.sakura.ne.jp/function/matrix.html

さくらの初期ドメインを含めて、合計20個まで設定できます。

http://faq.sakura.ad.jp/faq/1032/app/servlet/qadoc?000416


独自ドメインの追加方法

さくらインターネットで取得した独自ドメインを利用する

※他社で取得した場合は、他社で取得した独自ドメインを利用するを参考にしてください。

ドメインの追加が済んだら、マルチドメインの設定をします。

マルチドメインの設定

※HP作成の契約締結の時点でサブドメインを追加して、サブフォルダにマルチドメインを割り当てておくと、時間をロスせずスムーズにいくと思います。


もちろん、今後は相対パスをルートからの相対パスに統一する必要はありますが、マルチドメインで運用した場合は、上記のような「.htaccess」を設置する必要がなくなります。

テスト用サーバーという事ですので、「.htaccess」で対処しても問題ありませんが、マルチドメインでテストするのも一つの方法だと思います。

※ただし、「.htaccess」で対処する場合、このケースでは対応できるのは一つのサイト(サブフォルダ)だけです。

サイトごとに「xximg」「yyimg」「xxcss」「yycss」等と、画像やCSSのフォルダ名を別にする場合は、2つ以上のサイトに対処可能ですが、HTMLのフォルダまで分けるのは困難だと思います・・・

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 azuki1975 181 159 1 2009-11-20 00:05:20
  • id:kn1967
    要は/abcの部分を全部削っちゃえばいいんだから、
    ホームページ作成ソフトに対応したプラグインが無いか探してみるとか、
    テキストエディタなら置換機能をうまく使えないかだとか、
    あるいは perlやVBScriptなどで一括してやっちゃうとか・・・
    方法はいろいろとあるんだけどね・・・その人の開発環境がどのようなものか
    分からないとどうしようも無いわけなんすよ。

    OSとか、開発に使っているソフトとか判りませんかねぇ?
    (ソフトのバージョンもね。)
  • id:kn1967
    >手動で付け足している

    手動で相対に直してるってなら判るが、
    手っ取り早いと思って絶対パスにしたのがアダになったわけだね。

    htacessいじって転送したいのなら、止めないけど、
    場当たり的な事すると、後々のメンテナンスが面倒な事になるし、
    アダがアダ生むことになっちゃうよ。
    気づいた時点で、あからさまな間違いは訂正しておかないとね。

    ホームページ作成ソフトのFTP機能でサイト丸ごとダウンロードして、
    ルートの設定やりなおしって手もあるか・・・って、ソフト名もまだ不明だって・・・。
  • id:kn1967
    あ~あ~
    相手の状況も考えずにポイントゲットだけが目的の輩がたかってきちゃったよ・・・。

    嘘だと思うなら、実際にサンプル書かせてみるといいよ。
    サブディレクトリ側はどうするのかって時点で躓くはずだし、
    そもそも適当に検索した結果を書き込んで、
    あわよくばポイントをゲットってのが主目的の輩だから、
    返事もよこさないだろうけど・・・。
  • id:yossuys
    ありがとうございます。

    本番サーバへのアップだけであれば、相対パスの書き方が
    バラバラでも表示自体には問題はないですよね。

    問題は相対パスの書き方がバラバラに書かれていて、
    置換できないからだそうです。

    そのままテストサーバのサブディレクトリにアップすると
    スタイルシートも画像も、パスがルートではないので読み込まれません。

    サブディレクトリをルートとして設定できれば、
    サブディレクトリ名を付ける必要もない=置換の必要もない
    ですよね。

    ※置換できないというのは、悲惨なことに
    1ページ 1ディレクトリという訳のわからないことになってるそうです。
    ( 社内ではSEOにいいということになっているようで )

    これでは下手すると100回以上置換作業があるうえ、
    変換漏れや、変換違いが発生する確立が高いです。
  • id:kn1967
    忠告したとおり、1も2も不適当だったでしょ。
    回答投稿回数がゼロに近いってのも注意が必要だけど、
    平均受け取りポイントが20程度だったり、受け取り率が90%以下だったら、
    皆が開かないようにしているような要注意人物だからね。


    さて、本題だけど、最初のコメントをちゃんと読んでもらってるのかな?

    開発環境のほうで全自動的に置換するって手もある訳なんですよ。

    たとえ相手がプログラムなんかには不慣れだったとしても、
    数行から十数行程度の簡単なコードをテキストエディタで保存してもらって、
    それを実施するだけ・・・っていうようなものも可能なんですよ。

    繰り返しますけどね。そのためには相手の開発環境の情報が必要なのよ。
    「適当に動くもの作って、ハイそれまでよ」では貴殿も対応できないでしょ?
  • id:yossuys
    ご丁寧にありがとうございます。
    確かに酷いかもしれませんね・・・。

    開発環境ですが、開発環境といったものがないそうです。
    僕が開発環境なんて書いてしまったのが悪かった・・・。

    強いて言えばコーディングはフリーのHTMLソフトだとか。

    チェックはローカルブラウザ上で、お客さんにはレンタルサーバに
    アップして確認してもらったら、本番サーバへアップする、と。

    一応、地方のホームページ制作会社さんの話です。
  • id:kn1967
    製作会社で開発環境が判らんっていったい・・・ってか、
    そんな情報を公の場所に曝す必要なんてどこにもないんじゃない?

    ところで・・・、フリーだろうと有料だろうとHTML作成ソフトだったら、
    それも開発環境の構成要素の1つだよね。フリーだから悪いってもんでもないし、
    逆にそのソフトについての情報のほうが重要なんじゃないの?
    OSだって、WindowsXPとかVistaとかMacOSXのバージョンxx.x.xとかくらいなら、
    判んない訳ないだろうし・・・。

    念のため確認しておくけど・・・ここで言ってる開発環境ってのは、
    それぞれのページを実際に作った人たちのパソコンの事じゃなくて、
    ”貴殿のお知り合い”がサイトの動作確認などのために使っているパソコンの事ですよ。
    (500ページも一人で作ったのじゃなくて、バイトでも雇ったんでしょ。
    ハイレベルの人なら受注時に注意してくれるはずだから、値段優先で選んだのかな?
    こんなことは、関係無い事だね。ごめん。)

    聞けば聞くほど酷い状況のようだし、担当者も訳判らんというような状況なら、
    赤字覚悟で、恥も外聞も捨てて外部に整理を委託するほうが早いかもしれないね。


    500ページのリンク修正かぁ・・・
    SOHOなら4~5万くらいで置換してくれそうな気もするな・・・。

    私ですか? 私は、はてな経由で商売する気はないから受けないし、
    仮に受けたとしても最低でも15万-25万くらいはもらう事になると思う。
    (置換はほぼ一瞬とも言えるほどの時間で終わると思うけど、
    構文解析には余裕をもって半日、動作確認にアバウト1週間から2週間)

    3も含めて碌な回答着てないから、質問は一旦キャンセルして、
    今回のコメントの流れなんかも教えてあげて、もう少し、
    当人と相談したほうがいいと思うよ。
  • id:rouge_2008
    取り込んでいるようですので、コメントで失礼します。

    対象は画像、CSS、およびjsファイルだけですよね?
    htmlファイルへのリンクもリダイレクトで書き換えた方がいいですか?
    ※サブディレクトリをルートにするのではなく、ルートの相対パスで呼び出された画像等を、サブディレクトリ名を含めた正しいルートからの相対パスに書き換える方法です。
    (※「./~」や「../~」等のパスは、変更しないでそのまま呼び出します。)

    ※「.htaccess」はルートディレクトリに設置してください。

    RewriteEngine On
    RewriteBase /

    RewriteRule ^/?img/(gif|jpg|png)/([A-z0-9_-]+\.(?:gif|jpeg|jpg|png))$ /abc/img/$1/$2 [L]
    RewriteRule ^/?(css|js)/([A-z0-9_-]+\.(?:css|js))$ /abc/$1/$2 [L]
    RewriteRule ^/?((?:[A-z0-9/_-]+)(?:\.(?:html|htm)?))$ /abc/$1 [L]


    ※画像はサブディレクトリabcのimgフォルダ内にファイルの種類ごとにさらにフォルダで分類して置いてある場合です。
    ※CSSおよびjsファイルは、それぞれcssおよびjsフォルダにまとめて置いてある場合です。
    ※一応HTMLファイルも対象にしています。


    >まずページ毎に相対パスがバラバラ
    ( ../img/jpg や /aaa/img/jpg)だそうです。

    上記の「/aaa/img/jpg」が不明なのですが、他のサブフォルダの画像を呼び出しているのでしょうか?
    もしそうなのでしたら、画像をサブフォルダabc内の画像フォルダに移動してください。

    後は、パスの前に 手動で足した「/abc」を削除する必要があると思います。
    そのままでは本番環境で動かないと思いますので・・・


    今後は、相対パスをルートからの相対パスに統一して作成する事をお勧めします。
    ローカルにもテスト用に、AphaceでWEBサーバーの環境を構築した方がいいかもしれませんね。
  • id:yossuys
    kn1967さん

    いろいろとアドバイスいただき、ありがとうございます。
    もしよろしければ、ポイントをおくらせていただきたいので
    ぜひ質問に回答(適当で)いただけないでしょうか?


    rouge_2008さん

    ありがとうございます!
    まさに書いていただいた情報でビンゴかと。

    お手数ですが、ポイントをおくらせていただきたいので
    ぜひ質問に回答(適当で)いただけないでしょうか?
  • id:kn1967
    外野で騒いでいるだけだから、気にせんといてくださいな。
  • id:rouge_2008
    yossuysさん、ありがとうございます。
    お言葉に甘えて回答させていただきました。
    上手くいくといいですね。

    ※回答に少し補足しますが、上記のような「.htaccess」では、『同時に』二つ以上のサイト(サブフォルダ)をテストするのは困難という意味です。(作成状態によっては無理です・・・)
  • id:rouge_2008
    上記のようにコメントしましたが、今後作成する時にルートからの相対パスをサブフォルダを含めた正しいパスに統一して、本番環境にアップする前に置換を行ってパスを訂正するのでしたら、「.htaccess」も不要で同時に二つ以上のサイトのテストが可能ですね・・・

    ルートからの正しい相対パスに統一した場合は、置換処理も簡単だと思いますので、今後に関しては特に問題なさそうです。

    テキストエディタによって異なると思いますが、サブフォルダがxxxの場合です。
    検索「=(?:"|')/xxx(.+)?(?:"|')」
    置換「="\1"」
    ※正規表現に対応している必要有り
    ※\1が動作しない場合は、$1の場合もあります。
    ※最短一致に対応していない場合は、検索「=(?:"|')/xxx([^"]+)(?:"|')」


    正規表現を使用しなくても単純に以下で大丈夫かもしれません。
    検索「/abc」
    置換「」(空欄)

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません