【问题标题】:WordPress add_rewrite_rule for a string returning 404WordPress add_rewrite_rule 用于返回 404 的字符串
【发布时间】:2017-09-23 18:09:58
【问题描述】:

我目前正在开发一个 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>

这是 WordPress 的一些怪癖,还是我在这里遗漏了什么?

提前谢谢你,

Stijn van der Pol

【问题讨论】:

    标签: php wordpress apache .htaccess mod-rewrite


    【解决方案1】:

    我已经设法解决了我自己的问题。看来我的问题在于我的 add_rewrite_rule 逻辑的第二个参数。

    我部分关注了以下文章:http://www.rlmseo.com/blog/passing-get-query-string-parameters-in-wordpress-url/

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

    在我的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'];
    

    我希望这对某人有帮助:-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-13
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      • 2012-07-24
      相关资源
      最近更新 更多