是否从插件中写入/删除默认的.htaccess文件?

时间:2019-03-26 作者:TJ152

我正在开发WordPress插件,我有一个复选框选项来添加缓存控制头。如果选项设置为1,我想写入htaccess文件,否则删除新内容。

我一直在尝试使用insert_with_markers() 但无济于事。以下是我一直在使用的函数:

function write_cache_control(){
    $htaccess = get_home_path().".htaccess";
    $lines = array();
    $lines[] = \'<FilesMatch "\\.(js|css|jpg|jpeg|gif|png|pdf|swf|svg|svgz|ico|ttf|ttc|otf|eot|woff|woff2|webp)$">\';
    $lines[] = \'<IfModule mod_headers.c>\';
    $lines[] = \'ExpiresActive On\';
    $lines[] = \'ExpiresDefault  "access plus 1 month"\';
    $lines[] = \'Header set Cache-Control "public, immutable, max-age=2628000, s-maxage=2628000"\';
    $lines[] = \'Header set Access-Control-Allow-Origin "*\';
    $lines[] = \'</IfModule>\';
    $lines[] = \'</FilesMatch>\';
    insert_with_markers($htaccess, "Cache Control", $lines);
}
nbsp;

function clear_cache_control(){
    $htaccess = get_home_path().".htaccess";
    insert_with_markers($htaccess, "Cache Control", \'\');
}
我试着把他们wp, init &;wp_init 但似乎什么都不管用。我有什么遗漏吗?我应该使用WordPress吗wp_rewrite 或PHP的fread &;fwrite 还是类似的?

1 个回复
最合适的回答,由SO网友:tmdesigned 整理而成

几乎所有代码都是正确的。我甚至不知道insert\\u with\\u markers函数,现在我知道了,谢谢。

作为回报,我相信我有你的解决方案。

get_home_path() 当任何挂钩(init,wp, 等)触发。该函数是在管理端“file.php”中定义的,它是事物管理仪表板端的一部分,尚未加载。

钩子admin_init, 然而,假设你正在做这些,应该会为你服务得很好。htaccess在管理端更改。如果没有,您可以包括wp admin/includes/file。php,或者使用其他查找方法。htaccess,例如常量ABSPATH(尽管它们不是等价的)。

在您提供的第一个函数上使用admin\\u init钩子,我找到了写入到的规则。下次我在管理端加载页面时,htaccess文件。

顺便说一下,您可能需要检查current_user_can( \'edit_files\' ) 在允许该代码运行之前。