2017-06-21 90 views
1

背景

我已经改变了一个网站,我管理一个URL结构,需要建立这种变化的查询参数重定向,但保留价值的RewriteCond。使用与WordPress的add_rewrite_rule()

经过一番研究,我想出了一个工作改写:

RewriteCond %{QUERY_STRING} ^model=(.*) 
RewriteRule ^(building-automation|lighting-controls)/display.php$ /?pagename=products/details/?SKU=%1 [QSA,L] 

这将改变这一点:

[DOMAIN]/building-automation/display.php?model=Product1 

成这样:

[DOMAIN]/?pagename=products/details&SKU=Product1 

问题

我无法数字了解如何让该规则留在.htaccess文件中。我直接添加它,当我更新永久链接时它会被删除。所以现在我试图用WordPress的add_rewrite_rule()函数来添加它。

到目前为止的代码

我已经想通了最接近的是这样的:

add_rewrite_rule(
    '(building-automation|lighting-controls)/display.php?model=([^/]*)', 
    '?pagename=products/details&SKU=$2', 
    'top' 
); 

,在.htaccess文件创建这样的:

RewriteRule ^(building-automation|lighting-controls)/display.php?model=([^/]*) /?pagename=products/details&SKU=$2 [QSA,L] 

这重写规则不起作用。

问题

有没有办法使用add_rewrite_rule()实现工作重写规则?或者,有没有不同的RewriteRule,我可以使用它不需要RewriteCond,来实现HTTP查询参数的变化?

回答

0

重写很棘手,幸运的是我刚刚完成了与他们一起工作很多,所以这是我最好的帮助你的尝试。在WordPress中,您不希望直接调用php文件,如display.php。这是你系统结构中的第一个问题,我不确定这是一个插件还是什么,但这是一个坏主意,并且完全否定了首先使用WordPress的原因。

通常情况下,URL看起来像/楼宇自动化/信息/产品1,你将有做出点/index.php?pagename=products/details & SKU重写规则=产品1

对于你需要在WordPress内部有这样的内容,所以如果你使用一个子主题或者创建一个非常简单的文件插件,你可以将它放在你的functions.php中。

add_rewrite_rule('^building-automation/details/([^/]+)/?$', 
    'index.php?pagename=products/details&sku=$matches[1]', 'top'); 

然后,你需要添加重写标记,以便您可以访问信息查询VAR:

add_rewrite_tag('%sku%', '([^&]+)'); 

最后你想要么通过访问固定链接在你的代码的东西来刷新你的重写规则喜欢这个。你不想冲洗每一页的负载,虽然它是昂贵的服务器上:

if (! get_option('initial_rewrites_setup_flush')) { 
    flush_rewrite_rules(true); 
    update_option('initial_rewrites_setup_flush', true); 
} 
+0

我明白你的意思,但我没有一个选项不幸。我从'display.php'中将**重定向到**,因为那是旧的WP前站点上的URL。我们从网页收藏的人那里获得很多点击,而现在谁正在获得404错误。无论如何,我想出了一个解决方法。我必须将我的规则直接添加到.htaccess文件中,因为我不需要'add_rewrite_rules()'来完成。 –

+0

是的,如果你是从一个旧的.php网址引导,那么WordPress无法为你处理重写。 –