我更改了我管理的网站上的网址结构,并且需要设置更改查询参数的重定向,但保留该值。
经过一番研究,我发现了一个重写的工作:
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]
并且RewriteRule不起作用。
有没有办法使用add_rewrite_rule()
来实现有效的RewriteRule?或者,是否有一个不同的RewriteRule,我可以使用它不需要RewriteCond来实现HTTP查询参数的更改?
答案 0 :(得分:0)
重写很棘手,幸运的是我刚刚与他们合作很多,所以这是我最好的帮助你的尝试。在WordPress中,你不想直接调用php文件,如display.php。这是您系统结构中的第一个问题,我不确定这是一个插件还是什么,但它是一个坏主意,完全否定了首先使用WordPress的原因
通常,URL看起来像/ building-automation / details / Product1,你会有一个重写规则,指向/index.php?pagename=products/details&sku=product1
为此你需要在WordPress中使用它,所以如果使用子主题或者创建一个非常简单的一个文件插件,你可以把它放在你的functions.php中。
allIds.txt
然后您需要添加重写标记,以便您可以访问详细信息查询var:
add_rewrite_rule( '^building-automation/details/([^/]+)/?$',
'index.php?pagename=products/details&sku=$matches[1]', 'top' );
最后,您要通过访问代码中的固定链接来刷新重写规则。您不想刷新每个页面加载,因为它在您的服务器上很昂贵:
add_rewrite_tag( '%sku%', '([^&]+)' );