base href
タグを使用して、相対 URL がさまざまなインストールで機能するようにしようと考えました。
私のマスターページには、次のものがあります。
<base href="http://localhost/myproject/" />
<link rel="stylesheet" type="text/css" runat="server" href="css/main.css" />
<script type="text/javascript" src="js/jquery.min.js"></script>
私がオンhttp://localhost/myproject/default.aspx
のとき、それはうまく機能します.cssパスは次のようにうまく解決します:http://localhost/myproject/css/main.css
しかし、レポートというサブフォルダーがあります。に移動してhttp://localhost/myproject/reports/default.aspx
ソースを表示すると、次のように表示されます。
<base href="http://localhost/myproject/" />
<link rel="stylesheet" type="text/css" href="../css/main.css" />
<script type="text/javascript" src="js/jquery.min.js"></script>
何かがタグ../
のhref
属性に を挿入しました。これは、次のように解決されていることを意味します:見つかりません。link
http://localhost/css/main.css
これは奇妙です。なぜなら、スクリプト タグに期待したとおりに機能しているからです。リンクタグだけがこのインジェクションを取得します。IE と Chrome でソースを表示しましたが、どちらも同じだったので、それを実行しているのは IIS/.NET だと思いますが、実際には HTML に触れるべきではありませんrunat="server"
。これを少しいじってみると、マスター ページのリンク タグが変更されていることがわかりますが、スクリプト タグは変更されていません (先頭の「/」がない相対 URL の場合)。これは、「href」属性ではなく「src」属性であるためだと思います。したがって、ある/ない場合base href
、一方のタイプは修正されますが、もう一方は壊れます。
私は気が狂っていますか、これはバグですか、それとも間違っていますか?
編集:私は実際に base タグの href をハードコーディングしていません。データベース テーブルからアプリケーション メモリに読み込まれる設定の値を書き出しています。つまり、実際に実行しています<base href="<%=Settings.Configuration.website_rooturl%>" />
。私の開発マシンでは値がどこにあるのhttp://localhost/
かhttp://localhost/project/
、あるクライアントサイトではそれがhttp://www.clientsite.com/
、別のクライアントサイトでは仮想ディレクトリhttp://www.clientsite2.com/project/
です。