2012-05-19 96 views
0

我正在使用MOD_REWRITE通過單個文件傳送所有URL。其目的是讓漂亮的網址,如:使用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 

這是條PED下來HTML文件,完成所有的工作:

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

但是,如果你嘗試一個網址,如::

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

<!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工作

然後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,但認爲它存儲在其他地方似乎很奇怪!

+0

我不認爲問題出在你的'RewriteRule',而是你的HTML代碼中的資源路徑。 –

回答

1

使用根相對URL。

問題是,瀏覽器看到一個URL,如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重寫的問題。

看看你的服務器訪問日誌,你會看到哪些頁面被請求,你會看到他們不是你所期待的。

網站範圍內的資源總是最好與相對根URL一起引用 - 這意味着您不需要根據您在網站中的位置來調整它們,並且它使得它們可以在網站之間移植(這很方便,就像我一樣,你的本地機器上有不同域名的開發站點 - 在www.example.com本地工作時使用www.example.com.dev)

+0

確實如此,正如以下鏈接所示。感謝您的及時迴應。 http://www.facebookanswers.co.uk/code/foobar3/works/with/root/relatives – Puzbie