我有一个可怕的时间试图让WordPress的工作与基本的重写规则。我有一个插件目录中的php页面需要接收一个id号,以便它可以查找相关的记录。我希望用户访问的url example.com/redirect/{redirecttid},这应该是一个页面在example.com/wp-content/plugins/myplugin/redirect/index.php?redirecttid = $1,但这从来没有工作。
我试过通过重写API添加重定向规则。创建规则时,规则似乎忽略了重写库。这是Windows PC上的Bitnami WordPress安装程序,它将WP网站托管在名为/wordpress/的子目录中,而不是根目录中,因此重写库是/wordpress/而不是/。
当我尝试添加如下重写规则时,它只将RewriteBase放在第二部分的前面。
add_rewrite_rule( 'redirect/([0-9]+)/?', 'wp-content/plugins/myplugin/redirect/index.php?redirectid=$matches[1]', 'top' );
add_rewrite_tag( '%redirect%', '(.*)' );
flush_rewrite_rules();
这会导致将以下重写规则添加到.htaccess文件中:
RewriteRule ^redirect/([0-9]+)/? /wordpress/wp-content/plugins/myplugin/redirect/index.php?urlid=$matches[1] [QSA,L]
尽管有这条规则,像www.example.com这样的网址example.com/redirect/1/还是会导致Wordpress生成404错误页面。部分原因可能是网页使用了类似的URL结构/pagename/,但它与/pagename/id/不同,所以应该没问题。我试着在.htaccess文件中复制并粘贴该规则,但结果是相同的。如果我手动编辑规则的第一部分,将其改为^wordpress/redirect/([0-9]+)/,情况也是如此。
我不知道如何检查Wordpress中当前有哪些查询变量。rewrite tag函数没有向.htaccess文件添加任何内容,而且我似乎找不到存储在数据库中的任何查询变量。我尝试了以下方法,但它只生成了一个空数组:
global $wp_query;
var_dump($wp_query->query_vars);
因为这一切都是在插件的激活功能,我需要一个解决方案,完全是基于WordPress内的代码,以避免必须指示用户作出改变,他们的.htaccess文件直接对自己或呈现用户长的网址插件在他们的职位.这是一个网址伪装插件,所以我'我宁愿有一个URL显示给用户看起来比插件目录中的php文件的位置更干净,插件目录中的php文件只不过是根据id在数据库中查找URL并重定向用户。
另外,是否可以阻止规则的QSA部分由WordPress自动生成?我已经被其他人告知要摆脱QSA,但我不知道如何不手动编辑.htaccess文件。
根据Regex 101,问题是WordPress自动添加的克拉字符。如果我测试这个没有添加克拉字符的正则表达式,只要斜杠转义https://regex101.com/r/3vVMV7/1就可以正常工作,这表明有问题,因为我看到的每个API示例都没有转义斜杠,也没有提供阻止克拉字符被添加的方法。
1条答案
按热度按时间nsc4cvqm1#
只需在.htaccess文件中启用基本的重写规则,如下所示: