2010-03-13 80 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. 保存并上传。