0

我正在使用 MOD_REWRITE 通过单个文件引导所有 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/代码/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"/>

通过以 / 开头,您将强制它相对于网站的根目录,但通过不指定域,如果您在另一个站点上部署它就可以正常工作。这实际上只是一个 HTML 问题,而不是一个 mod 重写问题。

查看您的服务器访问日志,您会看到正在请求哪些页面,并且您会发现它们不是您所期望的。

站点范围的资源始终最好使用根相对 URL 来引用 - 这意味着您不需要根据您在站点中的位置来调整它们,并且它使它们可以在站点之间移植(如果您像我一样方便将您的开发站点放在具有不同域名的本地计算机上 - 我在 www.example.com 本地工作时使用 www.example.com.dev)

于 2012-05-19T16:37:25.680 回答