2017-09-22 56 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']; 

我希望這是有幫助給某人:-)