2017-09-22 45 views
0

我目前正在研究一个WordPress项目,并且有点卡在.htaccess重写规则上。WordPress add_rewrite_rule返回一个字符串404

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

免责声明:根据文档我应该用火柴$ [1],而不是$ 1。我试过,但是,它会简单地将id的值设置为“matches [1]”。在某种程度上,1美元似乎可以做到这一点。

当我浏览到mywebsite.com/id-check/12一切正常,我的ID有但是我的ID是建立了一些含有字母字符的12.

值从az,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的怪癖,还是我在这里错过了什么?

谢谢你在前进,

斯泰恩范德波

回答

0

我已经成功地解决我自己的问题。看来我的问题驻留在我的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']; 

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