[英]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-rewrite或http:// 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.