2012-01-10 49 views
0

我是.htaccess nOOb,但我認爲這是做到這一點的最佳方式。 我需要讓wordpress將'/'更改爲URL中的'#'。結構如下: http://thewebsite/pageid/sub_pageid並且期望的效果將是http://thewebsite/pagid#sub_pageid。我嘗試了幾條我在網上找到的規則,但其中每一條都失敗了。我相信它是因爲我有這些規則適用於它。只有一個頁面我有子頁面,這是唯一需要重寫的頁面。重定向後,我想jQuery向下滾動到錨點。如何使rewriterule添加錨點到wordpress url而不是「/」?

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase /thewebsite/ 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /thewebsite/index.php 
</IfModule> 
# END WordPress 

我試過RewriteRule^page/page#[NE]但我失敗了。我嘗試了很多其他的,但沒有效果。希望以前有人遇到過這個問題,只是知道,或者可以解釋我爲什麼失敗。 謝謝!

回答

2

如果你只是想重寫它爲一個單一的頁面,請嘗試:

RewriteRule [page\_id]\/(.*) /page_id#$1 [NE,R=301] 

這應該是你所需要的特定頁面ID或字符串。 NE的意思是'noescape',允許你重寫散列(#)符號。

對於任何網頁ID:

RewriteRule ([0-9]+)\/(.*) /$2#$1 [NE,R=301] 
+0

遺憾的是:什麼都沒有發生。即使我嘗試更改page_id,也沒有任何反應。這就像它不能識別page_id。我在本地主機上運行它 - 不知道它是否會改變任何東西。我可能會嘗試在原始服務器上測試它,但我認爲它不會有幫助。我懷疑我正在使用的其他一些規則導致這種失敗。更多的想法? – 2012-01-10 02:44:56

+0

你的其他規則是否有效?您的目錄配置中AllowOverride可能未設置爲全部? – benastan 2012-01-10 05:05:17

+0

是的,其他規則的工作,如果我故意做錯誤ig給了我錯誤,所以我很積極.htaccess的作品。我甚至嘗試過RewriteRule pageid asdasda [NE,R = 301] ,它給了我錯誤的URL在asdasda。 – 2012-01-10 08:40:46

0

試試這個下面的代碼,如果沒有必要跳過重寫contidion下載/ .PHP,確保你必須把404文件在你的域文件夾

RewriteEngine On 
    RewriteCond %{SCRIPT_FILENAME} !-d 
    RewriteCond %{SCRIPT_FILENAME} !-f 
    RewriteRule (.*) index.php 
    RewriteCond %{SCRIPT_FILENAME} -f 
    RewriteCond %{SCRIPT_FILENAME} .*\.php|/$ 
    RewriteCond %{SCRIPT_FILENAME} !download\.php 
    RewriteRule !/ index.php 

    ErrorDocument 401 /401.html 

希望它可以幫助你

+0

我沒有看到任何'#'我想做錨點? – 2012-01-10 08:40:21

0

好吧, 因爲我是一個的.htaccess瘸,我決定使用jQuery來解決我的問題。我用.attr()來替換原來的屬性'href'。我已經成功地改變鏈接與子頁面:

$(function(){ 
     $('#menu_on_HOME a').each(function(i){ 
     var atitle = $(this).attr("href"); 
     var strRep = atitle; 
      n = strRep.lastIndexOf('/'); //finds the last occurence of '/' to replace with '#' 
       if (n >= 0 && n + strRep.length >= strRep.length) { 
        strRep = strRep.substring(0, n) + "#" + strRep.substring(n + 1, n + strRep.length); // this is where magic happens 
       } 
     $(this).attr("href", strRep); //here is where I replace the original attribute 'href' 
     }); 
    }); 

功能上面派我到頁面包含所有子網頁的內容,然後點擊menu_on_HOME鏈接直接轉到子頁面的錨頁#子頁面。此外,在實際頁面我有內部鏈接到子頁面(內容可以通過cms作爲頁面編輯),但我不需要深入到子頁面,而是得到所需的錨點,所以我用ScrollTo

$(function(){ 
     $('menu_on_PAGE a').each(function(i){ 
     var atitle = $(this).attr("href"); 
     var strRep = atitle; 
      n = strRep.lastIndexOf('/'); 
      var name; 
       if (n >= 0 && n + strRep.length >= strRep.length) { 
        name = strRep.substring(n + 1, n + strRep.length); 
        strRep = strRep.substring(0, n) + "#" + name; 
       $(this).click(function(event){ 
        var scroller = '#content a[name=' + name + ' ]'; //point to the anchor 
      $(window).scrollTo(scroller,{duration:1500}); 
      }); 
       } 
     $(this).attr("href", strRep); 

     }); 
    }); 
$(window)._scrollable();  

我不知道如何「正確」或「錯誤」的解決方案,但它爲我的作品完美:)

相關問題