8

URL ルーティングを使用する PHP Web サイトを開発しています。HTML のすべてのパスを変更しなくても、サイトをhttp://site.example.com/からhttp://example.com/site/に移動できるように、サイトをディレクトリに依存しないようにしたいと考えています。css ファイルや画像など、ルーティングの対象外のファイルにリンクしているときに問題が発生します。

たとえばindex、コントローラーのアクションのビューにwelcomeimage が含まれているとしますimg/banner.jpg。ページが URL http://site.example.com/welcomeでリクエストされた場合、ブラウザは画像をhttp://site.example.com/img/banner.jpgとしてリクエストしますが、これは問題ありません。しかし、ページがhttp://site.example.com/welcome/indexという URL でリクエストされた場合、ブラウザはそれがディレクトリであると判断し、 http://site.example.com/welcomewelcomeとして画像を取得しようとします。 /img/banner.jpg、これは明らかに間違っています。

すでにいくつかのオプションを検討しましたが、それらはすべて不完全に思えます。

  • URL 書き換えを使用して、( *.css | *.js |...) または ( css/* | js/* |...) からの要求を正しいパスにリダイレクトします。

    問題: すべての拡張子は、書き換え規則で指定する必要があります。誰かが新しいファイルタイプ (たとえば mp3 ファイル) を追加しても、それは書き換えられません。

  • php 関数を使用して、各相対パスに基本パスを追加します。例えば:
    <img src="<?php echo url::base(); ?>img/banner.jpg" />

    問題点:見た目が汚い。パスを含むcssおよびjsファイルは、PHP で処理する必要があります。

では、Web サイトのディレクトリを独立した状態に保つにはどうすればよいでしょうか。私が思いついた方法よりも優れた/よりクリーンな方法はありますか?

4

4 に答える 4

8

あなたは頭に入れることができます

<base href="<?php echo url::base(); ?>" /> 

これは、ブラウザーがそのパスに関連する非絶対 URL を要求することを意味します。ただし、これが CSS ファイルなどに埋め込まれた URL にどのように影響するかはわかりません。これは、CSS ファイルで定義されたパスには影響しません。(mooware に感謝)

于 2008-11-09T20:32:43.243 に答える
2

これは機能しますが、タグにも<base>影響することを覚えておく必要があります。<a>次の例を考えてみましょう。

<!-- this page is http://oursite.com/index.html -->
<html>
 <head>
    <base href="http://static.oursite.com/" />
 </head>
 <body>
    <img src="logo.gif" alt="this is http://static.oursite.com/logo.gif" />
    <a href="/login">this links to http://static.oursite.com/login which is not what we wanted.  we wanted http://oursite.com/login</a>
 </body>
</html>

リンクを作成するために PHP 関数呼び出しを使用する場合、絶対 URL を出力することを確認するだけで問題ありません。しかし、あなた (またはあなたのデザイナー) が<a>タグを手作業でコーディングすると、同じ問題が再び発生し<a>ます<img>

編集:上記の段落は、私たちのように別のホスト名から画像を提供すると仮定して追加する必要があります。そうでない場合は、明らかに問題にはなりません。

于 2008-11-10T13:37:38.073 に答える
1

tomhaigh には良い点があり、さらに調査する価値があります。

MSDNによると、baseタグは、スタイル シートや画像など、すべての外部ソースに対して機能します。

于 2008-11-09T21:31:27.387 に答える
1

おそらく私は何かを見逃しているのでしょうが、あなたは私 (そして私は他のみんなが思っていた) がしていることをすることはできませんか? つまり、すべての画像、css、javascript などを共通のディレクトリに置きます。

/inc/images/
/inc/css/
/inc/javascript/
etc

そして、それらをベース相対 URL で参照します。つまり、次のようになります。

<img src="/inc/images/foo.jpg" />
etc

?

于 2008-11-09T22:30:17.843 に答える