2014-01-08 47 views
2

我設置了乾淨的網址,對於那些大部分他們工作得非常好的網站。然而,一些相對路徑的CSS,圖像等,使用假的清潔URL根濫交。乾淨的網址弄亂了相關鏈接

要啓動,這是我的.htaccess文件:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteBase/
# Rewrite for page and number 
RewriteRule ^([a-zA-Z0-9\-]+)/([0-9\-]+)$ index.php?page=$1&n=$2 [L] 
RewriteRule ^([a-zA-Z0-9\-]+)/([0-9\-]+)/$ index.php?page=$1&n=$2 [L] 
# Rewrite for page only 
RewriteRule ^([a-zA-Z0-9\-]+)$ index.php?page=$1 [L] 
RewriteRule ^([a-zA-Z0-9\-]+)/$ index.php?page=$1 [L] 

作品不夠好,我想要的,據我可以告訴這是我想要的。

我也有一些動態加載/重新加載頁面內容通過AJAX技術。基本上,給定一個頁面名稱(給index.php的var頁面),它返回一個HTML或PHP文件的URL來填充/替換一些包含主要內容的div。這東西雖然,立即不起作用。

function loadContent(page, number) { 
    // this stuff puts a temporary loading image 
    $("#StageContent").html(
     "<div id='loading' style='width:100%; text-align:center;'>" 
     + "<img src='images/ajax-loader.gif' style='margin-top:50px;' />" 
     + "</div>" 
    ); 
    // jQuery call to php to retrieve url for given page name 
    $.getJSON("includes/pages.php", {page:page, n:number}, function(json) { 
     $("#StageContent").load(json.page_url); 
     document.title = json.page_title; 
     current_page = json.page_name; 
     page_number = json.page_number; 
     console.log("page loaded: " + current_page); 
    }); 
} 

問題在於動態創建的網址(圖像源和json.page_url)現在已經添加了假清潔URL路徑給他們。例如。當爲主頁加載時(www.mysite.com/home/),它將「home /」添加到這兩個中,例如對於圖像,它試圖找到「www.mysite.com/home/images/ ajax-loader.gif「而不是」www.mysite.com/images/ajax-loader.gif「,導致一個不好的鏈接。但它只爲這兩個,而不是其他圖像或腳本或CSS鏈接在頁面中,所以其餘的加載罰款。 [之後:這是因爲我先加載它的基礎網址,然後嘗試加載一個頁面,當試圖只是乾淨的URL它創造的問題,就像下面一樣]

另一個奇怪的是,當使用多部分乾淨的URL(例如,讓我們說「www.mysite.com/papers/2/」,我希望從論文內容中獲得第2頁,現在除了上述問題外,還會發生網頁中的每個相關鏈接但只有一個級別,因此整個頁面無法正常加載,因爲現在CSS樣式表的調用在相關鏈接中添加了「論文/」,並且與相關鏈接中的每個圖片等相同。這可能是簡單的htaccess我猜測,但我錯過了什麼?我有我認爲的RewriteCond行或做我必須強迫非相對路徑的一切?

回答

4

您可能需要更改這些網址爲絕對URL,例如:

"<div id='loading' style='width:100%; text-align:center;'>" 
    + "<img src='/images/ajax-loader.gif' style='margin-top:50px;' />" 
    + "</div>" 

$.getJSON("/includes/pages.php", {page:page, n:number}, function(json) { 

還是這個標記添加到您的網頁的標題:

<base href="/" /> 

之所以發生這一切是因爲瀏覽器不知道你的mod_rewrite路由的任何信息,所以就這麼簡單有關,它正在加載位於www.mysite.com/papers/2/的頁面。這意味着任何相對URL的URL基址爲/papers/2/(而不是/在加載/index.php的情況下)。因此,瀏覽器所看到的每個相對URL都會自動附加它認爲是相對URL的基礎。

+0

工作感謝!認爲這是類似的東西,但不知道解決它的正確方法,而不強迫所有東西都是絕對的網址。只知道必須有一個簡單的,單線修復的地方。 – wowohweewah