2012-09-09 50 views
1

我有一個網站在Windows上的XAMPP上運行。該網站的根目錄位於localhost/sitename /。如何避免使用mod_rewrite發生此錯誤?

我已經使用.htaccess和mod_rewrite使index.php?app = appname出現在sitename/appname /或sitename/appname。

當我通過sitename/appname(無尾斜槓)訪問應用程序時,一切正常。瀏覽器在sitename/assets/..找到我的圖片和CSS,因爲它們是相對於當前頁面找到的。

問題是,當我通過sitename/appname /(帶有斜線)訪問應用程序時,瀏覽器無法找到我的資產文件夾,因爲它現在正在嘗試查看sitename/appname/assets /。

沒有mod重寫資產文件夾,我該怎麼辦才能解決這個問題?

+0

儘可能多的請嘗試提供代碼/腳本不能正常工作的例子。在這種情況下,包括來自.htaccess的RewriteRule行或者整個.htaccess文件可以幫助人們建議如何最好地幫助你。 – kdmurray

+0

'RewriteRule ^([a-zA-Z0-9 _-] +)$ index.php?app = $ 1' 'RewriteRule ^([a-zA-Z0-9 _-] +)/ $ index.php?app = $ 1' –

回答

1

我猜測沒有斜槓你的瀏覽器認爲當前目錄是/sitename/而斜槓你的瀏覽器認爲當前目錄是/sitename/appname/

因此,假設任何具有相對路徑(非以正斜槓開頭)的資產(如"assets/image.png")都將假定爲基於當前目錄。要解決這個問題,您可以通過用正斜槓啓動路徑來將所有資產路徑更改爲固定到根的絕對路徑,因此前面的示例將變爲"/sitename/assets/image.png"。但我認爲,儘管你的願望,以避免資產路徑的改寫,下面是簡單的:

RewriteRule ^/sitename/appname/assets/(.+)$ /sitename/assets/$1 

這將捉對不存在的appname/assets路徑任何丟失的請求,並將它們指的是正確的/sitename/assets路徑。

+0

是的,我已經完成了完整的mod重寫。謝謝。這是跟蹤斜槓常見的問題嗎?大多數網站是如何解決這個問題的? –

+0

是的,無聲的重寫會頻繁地導致其路徑已被重寫的頁面中的相對鏈接(圖像,樣式表,可下載文件等)的麻煩。至於最流行的解決方案,我不知道大多數人會選擇什麼,但只要解決方案適用於您,那麼它就是正確的解決方案。 – Bobulous

2

的問題是,當我通過網站名稱訪問應用程序/應用程序的名字/(帶斜線),瀏覽器無法找到我的資產文件夾,因爲它現在正試圖在網站名稱/ APPNAME /資產看/。

尾部斜線正在改變相對URI的基礎。如果不使用mod_rewrite巫術來解決這個問題,你需要使用<base>標籤在你的頁面標題添加正確的基礎:

<base href="/sitename/appname/"> 

或任何適當的基礎應該是。

+0

我不知道基本標籤,謝謝。它適用於基本標籤和樣式標籤中的絕對路徑。但是,有點不情願,我會用完整的mod重寫。 –

0

看看WordPress在index.php地址爲www.example.com/permalink-to-post/上查看帖子時如何處理這個問題,似乎最好的答案是將絕對文件路徑用於所有鏈接,圖像和CSS。

在這種情況下,到/ assets /文件夾的每個鏈接應該是http://localhost/sitename/assets/。 (直到該網站在一個實時網絡服務器上)