2010-03-13 87 views
4

UPDATE

我嘗試使用內部WordPress的重寫。我要做的是一個地址如下:WordPress的網頁地址重寫

http://example.com/galleria/artist-name 

發送到gallery.php頁面包含artist-name的變量。

我用這些規則爲每WordPress的文檔:

// REWRITE RULES (per gallery) {{{ 
add_filter('rewrite_rules_array','wp_insertMyRewriteRules'); 
add_filter('query_vars','wp_insertMyRewriteQueryVars'); 
add_filter('init','flushRules'); 

// Remember to flush_rules() when adding rules 
function flushRules(){ 
    global $wp_rewrite; 
    $wp_rewrite->flush_rules(); 
} 

// Adding a new rule 
function wp_insertMyRewriteRules($rules) 
{ 
    $newrules = array(); 
    $newrules['(galleria)/(.*)$'] = 'index.php?pagename=gallery&galleryname=$matches[2]'; 
    return $newrules + $rules; 
} 

// Adding the id var so that WP recognizes it 
function wp_insertMyRewriteQueryVars($vars) 
{ 
    array_push($vars, 'galleryname'); 
    return $vars; 
} 

什麼現在是奇怪的是,在我的本地WordPress的測試安裝,工作正常:庫頁被稱爲與galleryname變量傳遞。另一方面,在真實網站上,初始URL被接受(因爲它不會進入404),但它改變爲http://example.com/gallery(我的意思是它實際上在瀏覽器的地址欄中改變)並且該變量未被定義在gallery.php

任何想法可能會導致這種不同的行爲?

另外,任何其他方式,我不能想到哪些可以實現前三行描述相同的效果是非常好的。


老問題

我需要做的就是重寫這個地址是什麼:

(1) http://localhost/wordpress/fake/text-value 

(2) http://localhost/wordpress/gallery?somevar=text-value 

注:

  • 重映射必須是透明的:用戶可以隨時查看地址(1)
  • gallery是一個固定鏈接到WordPress的頁面,而不是一個真正的地址

基本上,我需要先改寫地址(修改它)然後再次將它反饋給mod重寫(以讓wordpress以自己的方式解析它)。

問題

,如果我只是做

RewriteRule ^fake$ http://localhost/wordpress/gallery [L] 

它的工作原理,但在瀏覽器的地址發生變化,這是不行的,如果我做

RewriteRule ^fake$ /wordpress/gallery [L] 

我得到一個404.我嘗試了不同的標誌而不是[L],但無濟於事。我怎樣才能使這個工作?

編輯:完整。htaccess的

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 

RewriteRule ^fake$ /wordpress/gallery [R] 

RewriteBase /wordpress/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /wordpress/index.php [L] 
</IfModule> 

# END WordPress 
+0

[L]表示「最後」,所以你在第一個之後沒有得到任何其他規則。第一個沒有充當「Last」的原因是因爲包含主機名強制請求返回到瀏覽器。請記住,重寫規則是按順序應用的,並且只對規則進行一次傳遞,所以如果您的/ wordpress/gallery URL需要重寫,請在上面顯示的RewriteRule之後執行規則。 – 2010-03-13 16:01:03

+0

(我不能提供一個'真正的'答案,沒有看到整個RewriteRules列表。) – 2010-03-13 16:01:48

+0

添加規則的完整列表 – 2010-03-13 16:23:39

回答

1

解決了,它是Permalink Redirect插件,需要配置爲跳過所需的「虛擬」URL,否則會發出301永久移動。

+0

這是唯一對我也有效的東西! – willdanceforfun 2011-06-06 02:41:08

1

試試這個規則:

RewriteRule ^fake/([^/]+)$ gallery?somevar=$1 [L] 
+0

不,這是我第一次嘗試,它只是從wordpress 404結束。 – 2010-03-13 16:34:13

0

道歉這裏非常延遲的答案,但我相信你需要做的是什麼濃湯建議,但與the addition of the passthrough/PT flag

這標誌強制重寫引擎將內部request_rec結構的uri字段設置爲文件名字段的值。
...
如果要混合來自允許URL到文件名轉換器的不同模塊的指令,則必須使用此標誌。

雖然Wordpress(通過mod_php)在mod_rewrite完成後運行,但它通常會得到原始的(預重寫)uri,並且它使用它來執行自己的內部重寫,而不是重寫的文件名值。

所以嘗試:

RewriteRule ^fake/([^/]+)$ gallery?somevar=$1 [QSA,PT] 

我添加QSA,這樣,萬一有人去頁= 3,它會被正確地傳遞/ WordPress的/假的/沿東西?讓我知道這是如何工作的。

+0

我也試過PT,但它沒有幫助。我相信只有通過wordpress的內部重寫才能做到這一點,正如Richard M在評論中所說的那樣。 – 2010-03-26 10:21:13

-1
  1. 使用您喜歡的HTML/PHP編輯器,打開wp-admin/includes/misc.php

  2. 查找功能功能got_mod_rewrite及其周邊線18左右。

  3. 註釋掉現有功能:/* this is commented out */ - 如果您確定解決方案正常工作,您可以刪除此功能,但爲了安全起見,只需將其註銷以備後用。

  4. 添加,而不是執行以下操作:

    function got_mod_rewrite() { 
        $got_rewrite = true; 
        return apply_filters(‘got_rewrite’, $got_rewrite); 
    } 
    
  5. 保存並上傳。