Php 返回404的字符串的WordPress添加\重写\规则

Php 返回404的字符串的WordPress添加\重写\规则,php,wordpress,apache,.htaccess,mod-rewrite,Php,Wordpress,Apache,.htaccess,Mod Rewrite,我目前正在做一个WordPress项目,有点被.htaccess重写规则卡住了 我的WordPress重写规则代码如下: if (!function_exists('check_string_id_rule')){ function check_string_id_rule(){ add_rewrite_rule('id-check/([^/]+)','id-check/?id=$1','top'); } add_action('init', 'check_string_id_rule'

我目前正在做一个WordPress项目,有点被.htaccess重写规则卡住了

我的WordPress重写规则代码如下:

if (!function_exists('check_string_id_rule')){
function check_string_id_rule(){
    add_rewrite_rule('id-check/([^/]+)','id-check/?id=$1','top');
}
add_action('init', 'check_string_id_rule');
免责声明:根据文档,我应该使用$matches[1]而不是$1。我已经尝试过了,但它只会将id的值设置为“matches[1]”$在某种程度上,1似乎起到了作用

当我导航到mywebsite.com/id-check/12时,一切正常,我的id值为12

然而,我的ID是由许多字符组成的,这些字符包含字母a-z、数字0-9和偶尔的连字符“-”

如果我导航到mywebsite.com/id-check/12a-5,我会被重定向到一个空页面。WordPress似乎将我重定向到一个不存在的页面。它试图将我重定向到/12a-5页面。转到mywebsite.com/id check/?id=12-a5可以正常工作

为什么我的规则没有得到执行?我检查了.htaccess文件,似乎没有任何竞争规则

 <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteRule ^id-check/([^/]+) /id-check/?id=$1 [QSA,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

重新启动发动机
重写基/
重写规则^index\.php$-[L]
重写规则^id check/([^/]+)/id check/?id=$1[QSA,L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
这是WordPress的怪癖还是我遗漏了什么

提前谢谢大家,


Stijn van der Pol

我已经设法解决了我自己的问题。我的问题似乎存在于add_rewrite_规则逻辑的第二个参数中

我部分遵循了以下文章:

我知道超链接是不受欢迎的,但要归功于rlmseo.com。简言之,他们提出了一种注册重写规则的不同方法。通过我自己的一些更改,它将生成以下代码

在my functions.php中:

if(!function_exists('add_rewrite_rules')){
    function add_rewrite_rules($aRules) {
        $aNewRules = ['id-check/([^/]+)' => 'index.php?pagename=id-check&id=$matches[1]'];
        $aRules = $aNewRules + $aRules;
        return $aRules;
    }
}
add_filter('rewrite_rules_array', 'add_rewrite_rules');
然后在我的functions.php中也使用以下标记重写逻辑:

function id_rewrite_tag() {
    add_rewrite_tag('%id%', '([^/]+)');
}
add_action('init', 'id_rewrite_tag');
然后,在我看来,我通过以下方式访问变量:

global $wp_query;
$id = $wp_query->query_vars['id'];
我希望这对某人有所帮助:-)