漂亮的URL使用mod_rewrite路径问题

时间:2012-05-19 16:29:18

标签: .htaccess mod-rewrite friendly-url

我正在使用MOD_REWRITE通过单个文件引导所有网址。目的是允许漂亮的网址:

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>

如果您访问以下网址,则此功能可用:

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

但是,如果您尝试使用以下网址:

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

然后将加载URL,但是,不会加载任何CSS或JS文件。

这是因为我使用的是相对网址。

如果我使用绝对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似乎很奇怪,但后来认为它存储在其他地方!

1 个答案:

答案 0 :(得分:1)

使用根相对网址。

问题是浏览器会看到http://www.facebookanswers.co.uk/code/foobar/no/longer/works之类的网址,因此相对链接会解析为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"/>

从/你开始强迫它相对于网站的根目录,但是不指定域名,如果你在另一个站点上部署它将会正常工作。这实际上只是一个HTML问题而不是mod-rewrite问题。

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

网站范围内的资源总是最好用根相对URL来表示 - 这意味着您不需要根据您在网站中的位置进行调整,这使得它们可以在网站之间移植(如果,像我一样,你的开发站点在具有不同域名的本地机器上 - 我在www.example.com上本地工作时使用www.example.com.dev)