Removing rules from .htaccess

时间:2012-06-24 作者:tsiger

我正在写一个需要写入的小插件。htaccess一个简单的non\\u wp\\u规则,我是这样做的:

function ci_flush_rules()
{
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
}
register_activation_hook(__FILE__, \'ci_flush_rules\');


function ci_add_rules()
{
    global $wp_rewrite;
    $proxy = plugin_dir_path(__FILE__) . \'proxy.php\';
    $non_wp_rules = array(\'(.*)\\.(jpe?g|gif|png)$\' => $proxy);
    $wp_rewrite->non_wp_rules = $non_wp_rules + $wp_rewrite->non_wp_rules;
}
add_action(\'generate_rewrite_rules\', \'ci_add_rules\');
规则写在中。htaccess文件符合预期。

现在我有两个问题。

Problem 1

当我尝试在插件停用期间删除此规则时,如下所示:

function ci_remove_rules()
{
    global $wp_rewrite;
    $wp_rewrite->non_wp_rules = array();
    $wp_rewrite->flush_rules();

} 
register_deactivation_hook( __FILE__, \'ci_remove_rules\' );
该规则不会被删除。如果我停用插件,然后访问Settings>Permalinks,它会删除该规则。

Problem 2

WordPress安装在子目录中( http://localhost/wordpress ) 当规则写入时。htaccess看起来像这样:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index\\.php$ - [L]
RewriteRule ^(.*)\\.(jpe?g|gif|png)$ /wordpress/Applications/MAMP/htdocs/wordpress/wp-content/plugins/myplugin/proxy.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>
# END WordPress
正如您所看到的,不是像/Applications/MAMP这样的路径。。。。它是/wordpress/Applications/MAMP。。。。

这是第一次处理wp\\U重写内容,请与我交流:)

1 个回复
SO网友:TheDeadMedic

Problem 1

你的钩子ci_add_rules() 刷新规则时仍将运行,因此请先将其删除(并避免“取消设置”)non_wp_rules, 你会破坏其他使用它的插件)。

function ci_remove_rules()
{
    remove_action( \'generate_rewrite_rules\', \'ci_add_rules\' );
    $GLOBALS[\'wp_rewrite\']->flush_rules();
}

Problem 2

非常确定您想要:

plugin_dir_url( \'proxy.php\', __FILE__ )
。。而不是:

plugin_dir_path( __FILE__ ) . \'proxy.php

结束

相关推荐

如何创建将添加目录的更智能的.htaccess文件?

这是我的电流。htaccess文件:Options +FollowSymLinks RewriteEngine on RewriteRule (.*) /directory/ [R=301,L] “目录”是我安装wordpress的地方。因此,这只是将用户从根域重定向到目录。我想做的是创建它,以便在添加目录时传递添加到url的任何信息。所以http://yoursite.tld/page 成为http://yoursite.tld/directory/page/我知道这可能是一个