2011-10-17 67 views
1

我有一個.htaccess文件的問題。我嘗試了谷歌搜索,但找不到有用的東西。htaccess內部和外部請求區別

我有一個AJAX請求將頁面加載到index.php中。觸發它的鏈接被前綴「#」通過jquery。因此,如果您點擊鏈接domain.com/foo/bar(wordpress permalink),您將在瀏覽器中獲得domain.com/#/foo/bar,並且內容將通過AJAX加載。

我的問題是:由於這些是博客文章,外部鏈接抓住真正的鏈接(domain.com/foo/bar),所以我希望他們重定向到domain.com/#/foo/bar(原因然後ajax檢查哈希並且做它的魔術)。

示例here

的前置jQuery代碼是:

$allLinks.each(function() { 
     $(this).attr('href', '#' + this.pathname); 
... 

,然後腳本檢查

if (hash) { //we know what we want, the url is not the home page! 
     hash = hash.substring(1); 
     URL = 'http://' + top.location.host + hash; 
     var $link = $('a[href="' + URL + '"]'), // find the link of the url 
... 

現在我試圖讓重定向與htaccess的工作。我需要檢查,如果該請求是外部或內部

RewriteCond %{REMOTE_HOST} !^127\.0\.0\.1 #??? 

,如果URL以「/#/」,這是一個問題,因爲它是一個評論的話,\%23沒有開始真正的工作不知何故。

RewriteCond %{REQUEST_URI} !^/\%23/(.*)$ #??? 

我如何得到這個工作簡單地重定向的外部要求從domain.com/foo/bar在不影響內部AJAX的東西domain.com/#/foo/bar?

+0

我會建議一個(更容易)客戶端解決您的問題。你能否更新你的答案與負責添加'#'到你的鏈接的jQuery代碼? – vzwick

+0

編輯:添加了jquery代碼 – mecreative

回答

0

我想你$allinks變量是在一個類似的方式分配:

$allinks = $('a'); 

而是執行此操作:

$allinks = $('a[href^="' + document.location.protocol + '//' + document.location.hostname + '"]'); 

這將改變內部鏈接只有你hash -y風格。

+0

不錯的想法,但問題有點不同。我需要外部網頁的解決方案,例如Facebook和谷歌鏈接到某個博客帖子而不是索引頁面。由於page/foo/bar存在索引,因此指向這些頁面的鏈接直接指向/ foo/bar,但需要以hash-y方式重定向,以便通過AJAX將blogpost加載到正確的上下文中。 thx爲你的幫助 – mecreative

0

好,我用PHP在這裏做它的代碼

$path = $_SERVER["REQUEST_URI"]; 
    if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
     echo "It's ajax"; 
    } else { 
    if(strpos($path, '/#/') === false) { 
     header("Location: http://schnellebuntebilder.de/#".$path); //ONLY WORKS IF THERE IS NO BODY TAG 
    } 
    } 

有肯定是一個更好的解決方案,但是這不會把戲現在和因爲頁/富/酒吧呢,在我的情況,不包括header.php,沒有> body < -tag和php「header()」函數可以工作。如果有人知道這個htaccess腳本,我很想知道和學習。