iis7_delete_rewrite_rule()
云策文档标注
概述
iis7_delete_rewrite_rule() 函数用于从 IIS 的 web.config 文件中删除 WordPress 重写规则。它检查文件是否存在,使用 DOMDocument 解析 XML,并移除以 'wordpress' 或 'WordPress' 开头的规则节点。
关键要点
- 函数接受一个必需参数 $filename,指定配置文件名,返回布尔值表示操作成功与否。
- 如果配置文件不存在,函数直接返回 true,因为无需删除规则。
- 依赖 DOMDocument 类,若不可用则返回 false。
- 使用 DOMXPath 查询匹配规则,删除后通过 saveDomDocument() 保存文件。
代码示例
function iis7_delete_rewrite_rule( $filename ) {
// If configuration file does not exist then rules also do not exist, so there is nothing to delete.
if ( ! file_exists( $filename ) ) {
return true;
}
if ( ! class_exists( 'DOMDocument', false ) ) {
return false;
}
$doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
if ( $doc->load( $filename ) === false ) {
return false;
}
$xpath = new DOMXPath( $doc );
$rules = $xpath->query( '/configuration/system.webServer/rewrite/rules/rule[starts-with(@name,'wordpress')] | /configuration/system.webServer/rewrite/rules/rule[starts-with(@name,'WordPress')]' );
if ( $rules->length > 0 ) {
$child = $rules->item( 0 );
$parent = $child->parentNode;
$parent->removeChild( $child );
$doc->formatOutput = true;
saveDomDocument( $doc, $filename );
}
return true;
}注意事项
- 函数自 WordPress 2.8.0 版本引入,主要用于 IIS 服务器环境。
- 相关函数包括 saveDomDocument() 和 iis7_save_url_rewrite_rules(),用于保存 XML 文档和更新重写规则。
原文内容
Deletes WordPress rewrite rule from web.config file if it exists there.
Parameters
$filenamestringrequired-
Name of the configuration file.
Source
function iis7_delete_rewrite_rule( $filename ) {
// If configuration file does not exist then rules also do not exist, so there is nothing to delete.
if ( ! file_exists( $filename ) ) {
return true;
}
if ( ! class_exists( 'DOMDocument', false ) ) {
return false;
}
$doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
if ( $doc->load( $filename ) === false ) {
return false;
}
$xpath = new DOMXPath( $doc );
$rules = $xpath->query( '/configuration/system.webServer/rewrite/rules/rule[starts-with(@name,'wordpress')] | /configuration/system.webServer/rewrite/rules/rule[starts-with(@name,'WordPress')]' );
if ( $rules->length > 0 ) {
$child = $rules->item( 0 );
$parent = $child->parentNode;
$parent->removeChild( $child );
$doc->formatOutput = true;
saveDomDocument( $doc, $filename );
}
return true;
}
Changelog
| Version | Description |
|---|---|
| 2.8.0 | Introduced. |