もろもろの事情で、htmlソースを絶対パスを使って記述したいのですが、そうすると、ルート設定が違うサーバーにおくとうまくいきません。

良い方法はないでしょうか?どうやら、.htaccessで「RewriteEngine on」を使ってルートを指定するのが、よさそうなのですが、
使い方がまちがっているのか、どうもうまくいきません。
「RewriteEngine on」の使い方でもいいですし、他の方法でも構いません。
ご教授頂ければ幸いです。宜しくお願い致します。
※<base href="">を使用して相対パスで記述したほうがいいとか、最初から相対パスを使用した方がよいというのは無しで、お願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2009/05/26 13:19:11
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:y-kawaz No.1

回答回数1422ベストアンサー獲得回数226

以下のようなコンテンツを別サーバの / や /foo に置いてもうまくリンクが繋がるようにしたいと言うことでしょうか?

  • /abc/1.html ← /abc/2.htmlへのリンク有り
  • /abc/2.html ← /abc/1.htmlへのリンク有り

■/に置く場合 (/1.html, /2.html)

/.htaccessに以下を記述します。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^abc/(.*)$ $1 [L]

■/fooに置く場合(/foo/1.html, /foo/2.html)

/.htaccessに以下を記述します。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^abc/(.*)$ foo/$1 [L]


元のコンテンツが/をベースにしている場合はこんな感じ

  • /1.html ← /2.htmlへのリンク有り
  • /2.html ← /1.htmlへのリンク有り

■/xyzに置く場合 (/xyz/1.html, /zyx/2.html)

/.htaccessに以下を記述します。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ xyz/$1 [L]


ちなみに上記 RewriteCond で !-d や !-f をチェックしているのは、本当にそこに実ファイルがある場合はそこにある実ファイルを優先するという意味です。

(どれも未テストです。上手く動かなかったらすみません…)

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

id:fablies2007

ご丁寧な回答、大変ありがとうございます。

とりあえず、絶対パスで記述すると、CSSが効かないのですが、

上の階層に、CSSを移動すると効くようになります。

おそらく、レンタルサーバー側の設定でドキュメントルートが一個上の階層になっているのかな?と思い、

解決方法を調べてるうちに、.htaccessでドキュメントルートのパスを指定すればいいらしい?

ということを知り、以下のようにやってみました。

ファイルを入れてるフォルダは「○○○.com/●●●」という感じのサブフォルダで、アクセス制限をかけてます。

設置先のドメインのドキュメントルートは「/home/□□□/○○○.com/public_html/」です。

そこで、http://www.nurs.or.jp/~sug/homep/rewrite/rewrite15.htmを参考にして、

「○○○.com/●●●/.htaccess」のなかに以下のような記述をしました。

-------------------------------------------------------------

AuthUserFile "/home/shadow/shadow.xsrv.jp/htpasswd/.htpasswd"

AuthName "Member Site"

AuthType BASIC

require valid-user

↑ここまでは、レンタルサーバー側で自動で生成されたもの↑

RewriteEngine on

RewriteBase /home/□□□/○○○.com/public_html/●●●

-------------------------------------------------------------

しかし、どうもうまくいきません。他のパスも選択できうるものはすべてやってみたのですが、うまくいかないです。

ただ、TOPフォルダにおくと、普通に絶対パスの記述だけでうまくいく(.htaccessなし)ので、

もしかしたら、レンタルサーバー(xserver)側でサブフォルダ内のファイルのドキュメントルートも、

強制的に「/home/□□□/○○○.com/public_html/」

になる設定になっているのかと思って、今に至ります。

ご教授いただければ大変うれしく思います。宜しくお願い致します。

2009/05/26 13:18:02
  • id:y-kawaz
    .htaccess じゃなく httpd.conf を修正する権限があり、Apacheのバージョンがhttpd-2.0以降であれば mod_extfilter を使って href や src を動的に書き換えてしまう方法も使えると思います。
  • id:fablies2007
    すみません。誤って終了してしまいました。
    ご丁寧に回答いただいたのに、大変申し訳ないです。
  • id:fablies2007
    改めてスレを立てました。何でも結構ですので、そちらにご回答いただければポイントを差し上げたいと思います。
    ご迷惑をかけて大変申し訳ございません!
  • id:rouge_2008
    外部CSSファイルが適用されないのでしょうか?
    imgタグによる画像の表示などは大丈夫ですか?
    ドキュメントルート「/home/□□□/○○○.com/public_html/」以下に置く.htaccessは以下で大丈夫ではないかと思いますが・・・

    RewriteEngine on
    RewriteBase /
    以降ルールを記述・・・


    「/home/□□□/○○○.com/public_html/foo/」以下に置く場合は、

    RewriteEngine on
    RewriteBase /foo
    以降ルールを記述・・・


    ルートが違うサーバーということですが、ドキュメントルートと「foo」は同一ドメインで、「http://yourdomain.jp/foo/」のようにしてアクセスできるのでしょうか?
    それとも、サブドメインが割り当てられていて、「http://foo.yourdomain.jp/」でないとアクセスできないのでしょうか?

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

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

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

回答リクエストを送信したユーザーはいません