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