簡體   English   中英

在WordPress中將mod_rewrite規則添加到.htaccess

[英]Adding mod_rewrite Rules to .htaccess in WordPress

我正在嘗試在WordPress中修改mod重寫規則,而不直接修改.htaccess文件。 根據此網頁,似乎可行: 在WordPress中向.htaccess添加mod_rewrite規則 我按照說明創建了一個插件,如下所示。 我將文件名保存為sample-mod-rewrite.php

/* Plugin Name: Sample Mod Rewrite  */

add_action('generate_rewrite_rules', array(&$this, 'generate_rewrite_rules'));
add_filter('mod_rewrite_rules', array(&$this, 'mod_rewrite_rules'));
function generate_rewrite_rules() {
    global $wp_rewrite;
    $non_wp_rules = array(
        'simple-redirect/?$plugin_name' => 'http://google.com',
        'one-more-redirect/?$plugin_name' => 'http://yahoo.com'
    );

    $wp_rewrite->non_wp_rules = $non_wp_rules + $wp_rewrite->non_wp_rules;
}
function mod_rewrite_rules($rules) {
    $rules = preg_replace('/^(RewriteRule ^.*+/?$)plugin_name (/)(.*) ([QSA,L])$/im', '1 3 [R=301,L]', $rules);
    return $rules;
}

應該如何運作? 激活插件后,當我訪問http:// siteurl / simple-redirect /?sample-mod-rewritehttp:// siteurl / simple-redirect /?sample-mod-rewrite.php時 ,瀏覽器僅顯示404錯誤,“找不到對象!”。 我想我一定做錯了。

部分array(&$this, 'generate_rewrite_rules')看起來像傳遞類方法,但是網頁上沒有任何關於創建類的信息。 它應該真的很簡單。

謝謝。

由於您的插件不使用類,因此您應該使用:

add_action('generate_rewrite_rules', 'generate_rewrite_rules');
add_filter('mod_rewrite_rules', 'mod_rewrite_rules');

mod_rewrite_rules使用的regexp並不是真的正確,但是由於我不知道您真正想要實現什么,所以我不能給您提供更好的regexp。

並且不要忘記重新生成您的.htaccess文件。

編輯

要重新生成.htaccess文件,您只需訪問永久鏈接設置。

函數generate_rewrite_rules將在.htaccess添加以下規則:

RewriteRule ^simple-redirect/?$plugin_name /wordpress/http://google.com [QSA,L]
RewriteRule ^one-more-redirect/?$plugin_name /wordpress/http://yahoo.com [QSA,L]

並且mod_rewrite_rules函數的目標是更正這些規則,您可以嘗試:

$rules = preg_replace('#^(RewriteRule \^.*/\?\$)plugin_name .*(http://.*) \[QSA,L\]#mi', '$1 $2 [R=301,L]', $rules);

那么規則將是:

RewriteRule ^simple-redirect/?$ http://google.com [R=301,L]
RewriteRule ^one-more-redirect/?$ http://yahoo.com [R=301,L]

因此,訪問siteurl/simple-redirect/將重定向到google.com ...

我正在發布完整的工作代碼。 我把它包裝在一堂課中。

/* Plugin Name: Sample Mod Rewrite  */

add_action('generate_rewrite_rules', array(new custom_mod_rewrite, "generate_rewrite_rules"));

class custom_mod_rewrite {
    function __construct() {
        $this->wp_rewrite = & $GLOBALS["wp_rewrite"];
    }
    function generate_rewrite_rules() {

        $non_wp_rules = array(
            'simple-redirect/?$plugin_name' => 'http://google.com',
            'one-more-redirect/?$plugin_name' => 'http://yahoo.com'
        );

        $this->wp_rewrite->non_wp_rules = $non_wp_rules + $this->wp_rewrite->non_wp_rules;
        add_filter('mod_rewrite_rules', array(&$this, "mod_rewrite_rules"));
    }
    function mod_rewrite_rules($rules) {
        return preg_replace('#^(RewriteRule \^.*/)\?\$plugin_name .*(http://.*) \[QSA,L\]#mi', '$1 $2 [R=301,L]', $rules);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM