0

MOD_REWRITE を使用して、単一のファイルを介してすべての URL をチャネルしています。目的は、次のようなきれいな URL を許可することです。

http://mysite.com/shop/electrical/hoover

また

http://mysite.com/shop/checkout

などなど

次の .htaccess ファイルを使用してこれを実現します。

# Turn on the RewriteEngine
RewriteEngine On
#
#  Rules
#
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . urlbug.htm

これは、すべての作業を行う HTML ファイルを簡略化したものです。

<!doctype html>
<html class="no-js" lang="en"> 
<head>
<meta charset="utf-8">
<title>My web page</title>
<link type="text/css" href="css/ui-lightness/jquery-ui-1.8.20.custom.css" media="all"    rel="stylesheet"/>
</head>
<body>
<div id="accordion"><h3><a href="#">Home</a></h3><div>
<ul class="submenu"><li><a href="#" title="Clear Counters">Clear Counters</a></li></ul>
</div>
<h3><a href="#">Maintan Tables</a></h3>
<div>
<ul class="submenu">
<li><a href="#" title="Stock">Stock</a></li>
<li><a href="#" title="Categories">Categories</a></li>
<li><a href="#" title="Designers">Designers</a></li>
</ul>
</div>
<h3><a href="#">User Database</a></h3><div><ul class="submenu"></ul></div>
</div>
<script src="js/libs/jquery-1.7.1.min.js"></script>
<script src="js/libs/jquery-ui-1.8.20.custom.min.js"></script>
<script src="js/plugins.js"></script>
</body></html>

これは、次のような URL にアクセスすると機能します。

http://www.facebookanswers.co.uk/code/foobar/works

ただし、次のような URL を試すと:

http://www.facebookanswers.co.uk/code/foobar/no/longer/works

その後、URL はロードされますが、CSS または JS ファイルはロードされません。

これは、相対 URL を使用しているためです。

代わりに絶対 URL を使用すると、すべて正常に動作します。これを示すために、別のフォルダーをセットアップしました。

http://www.facebookanswers.co.uk/code/foobar2/works

http://www.facebookanswers.co.uk/code/foobar2/works/as/well

これは、絶対 URL を含むコードです。

<!doctype html>
<html class="no-js" lang="en"> 
<head>
<meta charset="utf-8">
<title>My web page</title>
<link type="text/css" href="http://www.facebookanswers.co.uk/code/foobar2/css/ui-lightness/jquery-ui-1.8.20.custom.css" media="all" rel="stylesheet"/>
</head>
<body>
<div id="accordion"><h3><a href="#">Home</a></h3><div>
<ul class="submenu"><li><a href="#" title="Clear Counters">Clear Counters</a></li></ul>
</div>
<h3><a href="#">Maintan Tables</a></h3>
<div>
<ul class="submenu">
<li><a href="#" title="Stock">Stock</a></li>
<li><a href="#" title="Categories">Categories</a></li>
<li><a href="#" title="Designers">Designers</a></li>
</ul>
</div>
<h3><a href="#">User Database</a></h3><div><ul class="submenu"></ul></div>
</div>
<script src="http://www.facebookanswers.co.uk/code/foobar2/js/libs/jquery-1.7.1.min.js"></script>
<script src="http://www.facebookanswers.co.uk/code/foobar2/js/libs/jquery-ui-1.8.20.custom.min.js"></script>
<script src="http://www.facebookanswers.co.uk/code/foobar2/js/plugins.js"></script>
</body>
</html>

どこかで、道が混乱している。これを回避する最善の方法は何ですか? 私が開発しているコードは多くのサイトで使用されるため、可能であれば相対 URL を維持したいと考えています。絶対 URL を使用しなければならない場合でも、世界の終わりではありません。また、絶対 URL にはパフォーマンス上の利点があることも知っていますが、ブラウザーが URL を問題なく読み込むのに、別の場所に保存されていると考えるのは奇妙に思えます。

4

1 に答える 1

1

ルート相対 URL を使用します。

問題は、ブラウザーがhttp://www.facebookanswers.co.uk/code/foobar/no/longer/worksのような URL を認識するため、相対リンクがhttp://www.facebookanswers.co.uk/として解決されることです。 code/foobar/no/longer/works/code/foobar2/css ... など。

代わりにこれを使用してください...

<link type="text/css" href="/code/foobar2/css/ui-lightness/jquery-ui-1.8.20.custom.css" media="all" rel="stylesheet"/>

/ で開始することで、Web サイトのルートに対して強制的に相対的になりますが、ドメインを指定しないことで、別のサイトにデプロイしても問題なく動作します。これは、mod の書き換えではなく、実際には単なる HTML の問題です。

サーバー アクセス ログを見ると、どのページが要求されているかがわかりますが、それらが期待したものではないことがわかります。

サイト全体のリソースは、常にルート相対 URL で参照するのが最適です。これは、サイト内の場所に基づいてリソースを調整する必要がないことを意味し、サイト間で移植可能になります (私のように、別のドメイン名を持つローカル マシンに開発サイトを持っている - www.example.com でローカルに作業するときは www.example.com.dev を使用します)

于 2012-05-19T16:37:25.680 に答える