2011-03-07 97 views
0

我試圖讓.htaccess重寫我的網站的網址。例如:.htaccess在我不想要的時候重寫我的網址!

/Lessons/PhrasalVerbs/PVList/bringup 

成爲

/index.php?page=Lessons/PhrasalVerbs/PVList/bringup 

這似乎是一個比較普遍的願望,於是四處尋找互聯網後,我想出了(讀bemusedly複製)這一點:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ http://www.example.com/index.php?page=$1 [L,QSA] 

現在原樣,工作的事情,但它是第二,不是第一個網址,出現在酒吧。現在,如果我的最後一行改變從

RewriteRule ^(.*)$ http://www.example.com/index.php?page=$1 [L,QSA] 

RewriteRule ^(.*)$ /index.php?page=$1 [L,QSA] 

現在的地址欄看起來不錯,但該網站從尋找正確失去其大部分的格式和圖像的...(unfortuntely去我不能發佈圖片或圖片鏈接...)

另外,如果我點擊,例如,鏈接到「彈出」頁面再次,該URL從

/Lessons/PhrasalVerbs/PVList/bringup 

/Lessons/PhrasalVerbs/PVList/Lessons/PhrasalVerbs/PVList/bringup 

所以這有點重演。

這可能正是清楚,我在mod_rewrite的完全沒用,我非常困惑。由於這似乎是.htaccess的一個相當普遍的用法,我希望有人能指出我愚蠢的錯誤!

回答

1

這是一個非常常見的錯誤做URL重寫時,它有無關的mod_rewrite。

的問題是,你使用相對URL在文檔中。客戶端使用基本URL來解析相對URL,即該文檔的URL未另行指定。

因此,如果文檔的URL路徑是/foo/bar並且在它與相對URL baz/quux的鏈接,客戶端解析到/foo/baz/quuxbaz/quux解決相對於/foo/bar而不是/

可以通過使用絕對路徑而不是解決這個問題,即/baz/quux代替baz/quux。或者通過使用BASE element明確更改基本URI。但我不會這樣做,因爲它影響所有相對URL,而不僅僅是相對URL路徑。

+0

嘿謝謝!這有助於大幅度清理事情。我繼續使用基本元素,它工作。我不完全明白你的意思是「但我不會那樣做,因爲它會影響所有相對URL而不僅僅是相對URL路徑。」但知道編程,它可能會回來咬我在後面。現在該網站運作。再次感謝! – 2011-03-08 13:24:31

+0

@邁克爾貝珊:我的意思是,新的基本URL也適用於像'foo'(僅查詢)或'#foo'(僅片段)的網址? – Gumbo 2011-03-08 14:32:47