问题描述
我正在尝试使用wordpress重写规则为正在开发的插件配置路由。我正在从为插件创建的类中调用代码-我正在使用的代码是:
function __construct() {
add_action('init',array($this,'category_rewrite_rule'),10,0);
}
function category_rewrite_rule() {
add_rewrite_rule(
'^products/([^/]*)/?','index.php?category=$matches[1]','top'
);
}
它应该使用domainname.com/products/garden
之类的网址并显示/index.php?category=garden
,但此刻它会显示该网站的主页。如果我直接导航到/index.php?category=garden
,则可以看到预期的页面。
我知道代码正在运行,因为我在类中还有其他可以正常工作的函数,所以我也可以将die()
放在可以正常工作的重写函数中。
每次更改代码后,我一直按“ WP设置->永久链接”页面上的“保存”以刷新链接。
我当时想这可能是我本地开发环境遇到的一个问题;我正在使用Laravel Valet在Mac上工作,并且我还注意到站点根文件夹中没有.htaccess
文件。我尝试手动创建一个(使用默认的WP代码),但没有帮助。
编辑:今天下午,我使用Laravel Forge设置了一个Wordpress网站并在其上安装了我的插件,但是我仍然遇到相同的问题,所以也许毕竟不是服务器环境:(
编辑2:我已经在VM上设置了一个LAMP堆栈,并且代码可以正常工作,因此使用Laravel Valet / Forge(Nginx)绝对可以。
有人能帮忙吗?
谢谢
解决方法
正如我在编辑中所怀疑的那样,问题是因为我的本地和第一台测试服务器分别使用Laravel Valet和Laravel Forge。
我意识到这是问题所在,因为当我尝试在VM上使用LAMP堆栈时,代码可以按预期工作。
最后,我意识到我必须手动将重写规则添加到我的Nginx配置中,以使它们起作用,因为在服务器使用Nginx时无法使用Wordpress的add_rewrite_rule函数。