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
[L]表示「最後」,所以你在第一個之後沒有得到任何其他規則。第一個沒有充當「Last」的原因是因爲包含主機名強制請求返回到瀏覽器。請記住,重寫規則是按順序應用的,並且只對規則進行一次傳遞,所以如果您的/ wordpress/gallery URL需要重寫,請在上面顯示的RewriteRule之後執行規則。 – 2010-03-13 16:01:03
(我不能提供一個'真正的'答案,沒有看到整個RewriteRules列表。) – 2010-03-13 16:01:48
添加規則的完整列表 – 2010-03-13 16:23:39