diff --git a/README.md b/README.md index df0eeaa..b25d37a 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,208 @@ -# htaccess-manager +# HTACCESS Manager -一个专业的WordPress插件,用于智能管理.htaccess文件中的重定向规则。支持HTTPS强制重定向、WWW与根域名跳转配置,以及二级域名站点支持。 \ No newline at end of file +一个专业的WordPress插件,用于智能管理.htaccess文件中的重定向规则。支持HTTPS强制重定向、WWW与根域名跳转配置,以及二级域名站点支持。 + +## 功能特点 + +### 🔒 强制HTTPS重定向 +- 自动将所有HTTP请求重定向到HTTPS +- 确保网站安全连接 + +### 🌐 灵活的域名跳转配置 +- **WWW跳转到根域名**:`www.example.com` → `example.com` +- **根域名跳转到WWW**:`example.com` → `www.example.com` +- **自由选择跳转方向** + +### 🏷️ 二级域名支持 +- 专门针对二级域名站点的优化配置 +- 启用后只强制HTTPS,不处理WWW跳转 + +### ⚡ 智能规则管理 +- 自动生成优化的.htaccess规则 +- 不干扰其他插件的现有规则 +- 安全的规则添加和移除机制 + +### 🛡️ 安全可靠 +- Must-use插件支持,确保高可靠性 +- 精确的规则匹配,避免误删其他配置 +- 完整的卸载清理机制 + +## 安装方法 + +### 方法一:手动安装 +1. 下载插件ZIP文件 +2. 在WordPress后台进入【插件】→【安装插件】→【上传插件】 +3. 选择ZIP文件并上传 +4. 激活插件 + +### 方法二:FTP安装 +1. 解压插件文件到 `wp-content/plugins/htaccess-manager/` +2. 在WordPress后台【插件】页面激活"HTACCESS Manager" + +## 使用方法 + +### 基本配置 +1. 进入【设置】→【HTACCESS 管理】 +2. 根据您的需求配置选项: + - **是否为二级域名**:如果使用类似 `sub.domain.com` 的地址请启用 + - **重定向类型**:选择WWW与根域名的跳转方向 + - **自动更新**:启用后设置更改时自动更新.htaccess文件 + +### 配置示例 + +#### 场景1:主域名站点,WWW跳转到根域名 +``` +www.example.com → example.com +http → https +``` + +**配置:** +- 是否为二级域名:❌ 否 +- 重定向类型:✅ WWW跳转到根域名 + +#### 场景2:主域名站点,根域名跳转到WWW +``` +example.com → www.example.com +http → https +``` + +**配置:** +- 是否为二级域名:❌ 否 +- 重定向类型:✅ 根域名跳转到WWW + +#### 场景3:二级域名站点 +``` +sub.example.com → https://sub.example.com +(不处理WWW跳转) +``` + +**配置:** +- 是否为二级域名:✅ 是 +- 重定向类型:自动禁用 + +### 手动操作 +- **复制规则**:手动复制生成的规则到.htaccess文件 +- **手动更新**:强制更新.htaccess文件 +- **移除规则**:安全移除所有本插件添加的规则 + +## 生成的规则示例 + +### WWW跳转到根域名 + HTTPS +```apache +# BEGIN HTACCESS Manager +RewriteEngine On + +# 同时处理 HTTPS 和 WWW 重定向 +RewriteCond %{HTTPS} off [OR] +RewriteCond %{HTTP_HOST} ^www\. [NC] +RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] +RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301] +# END HTACCESS Manager +``` + +### 二级域名 + 只强制HTTPS +```apache +# BEGIN HTACCESS Manager +RewriteEngine On + +# 强制HTTPS重定向(二级域名) +RewriteCond %{HTTPS} off +RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] +# END HTACCESS Manager +``` + +## 兼容性 + +### 测试环境 +- ✅ WordPress 5.0+ +- ✅ PHP 7.4+ +- ✅ Apache 2.4+ +- ✅ LiteSpeed服务器 +- ✅ 多站点网络 + +### 插件兼容 +- ✅ 与大多数缓存插件兼容 +- ✅ 与安全插件兼容 +- ✅ 不影响其他.htaccess规则生成插件 + +## 故障排除 + +### 常见问题 + +**Q: 插件激活后网站出现重定向循环?** +A: 检查服务器是否已配置SSL证书,或尝试清除浏览器缓存。 + +**Q: .htaccess文件无法写入?** +A: 确保.htaccess文件权限设置为644,或使用手动复制功能。 + +**Q: 规则没有生效?** +A: 确认服务器支持mod_rewrite模块,检查Apache配置。 + +**Q: 如何恢复默认设置?** +A: 停用并重新激活插件,或使用"移除规则"功能。 + +### 日志检查 +如果遇到问题,请检查: +1. WordPress调试日志 +2. 服务器错误日志 +3. .htaccess语法验证 + +## 开发者信息 + +### 文件结构 +``` +htaccess-manager/ +├── htaccess-manager.php # 主插件文件 +├── readme.md # 说明文档 +└── (自动生成) + └── mu-plugins/ + └── htaccess-helper.php # Must-use插件 +``` + +### 钩子函数 +插件提供以下WordPress钩子: +- `htaccess_manager_before_update` - 规则更新前 +- `htaccess_manager_after_update` - 规则更新后 + +### 自定义开发 +如需扩展功能,可参考插件中的规则生成逻辑: +```php +$manager = new HTACCESS_Manager(); +$rules = $manager->generate_htaccess_rules(); +``` + +## 版本历史 + +### v1.0.2 (当前版本) +- 增强规则移除安全性 +- 改进空行处理 +- 优化MU插件逻辑 + +### v1.0.1 +- 修复规则冲突问题 +- 添加内容预览功能 +- 改进用户界面 + +### v1.0.0 +- 初始发布 +- 基础重定向功能 +- Must-use插件支持 + +## 技术支持 + +如果您遇到问题或需要帮助,请: +1. 查看本README文档 +2. 检查WordPress错误日志 +3. 联系服务器管理员确认Apache配置 + +## 许可证 + +GPL v2或更高版本 + +## 贡献 + +欢迎提交Issue和Pull Request来帮助改进这个插件。 + +--- + +**注意**:在使用本插件前,请务必备份您的.htaccess文件和数据库。 \ No newline at end of file diff --git a/htaccess-manager.php b/htaccess-manager.php new file mode 100644 index 0000000..4d47e37 --- /dev/null +++ b/htaccess-manager.php @@ -0,0 +1,449 @@ +options = get_option('htaccess_manager_options'); + add_action('admin_menu', array($this, 'add_admin_menu')); + add_action('admin_init', array($this, 'admin_init')); + add_action('admin_notices', array($this, 'admin_notices')); + register_activation_hook(__FILE__, array($this, 'activate')); + register_deactivation_hook(__FILE__, array($this, 'deactivate')); + register_uninstall_hook(__FILE__, array('HTACCESS_Manager', 'uninstall')); + } + + public function activate() { + // 创建must-use插件目录 + $mu_plugins_dir = WP_CONTENT_DIR . '/mu-plugins'; + if (!file_exists($mu_plugins_dir)) { + wp_mkdir_p($mu_plugins_dir); + } + + // 生成初始选项 + if (false === $this->options) { + $default_options = array( + 'redirect_type' => 'www_to_root', + 'is_subdomain' => false, + 'auto_update' => true + ); + update_option('htaccess_manager_options', $default_options); + } + + $this->update_htaccess(); + $this->create_mu_plugin(); + } + + public function deactivate() { + // 从.htaccess中安全移除本插件的规则 + $this->safe_remove_htaccess_rules(); + + // 清理mu-plugin + $mu_plugin_file = WP_CONTENT_DIR . '/mu-plugins/htaccess-helper.php'; + if (file_exists($mu_plugin_file)) { + unlink($mu_plugin_file); + } + } + + public static function uninstall() { + // 删除选项 + delete_option('htaccess_manager_options'); + + // 从.htaccess中安全移除规则 + self::safe_remove_htaccess_rules_static(); + + // 清理mu-plugin + $mu_plugin_file = WP_CONTENT_DIR . '/mu-plugins/htaccess-helper.php'; + if (file_exists($mu_plugin_file)) { + unlink($mu_plugin_file); + } + } + + public function add_admin_menu() { + add_options_page( + 'HTACCESS 管理', + 'HTACCESS 管理', + 'manage_options', + 'htaccess-manager', + array($this, 'admin_page') + ); + } + + public function admin_init() { + register_setting('htaccess_manager', 'htaccess_manager_options'); + + add_settings_section( + 'htaccess_manager_section', + '重定向设置', + array($this, 'section_callback'), + 'htaccess_manager' + ); + + add_settings_field( + 'is_subdomain', + '是否为二级域名', + array($this, 'is_subdomain_callback'), + 'htaccess_manager', + 'htaccess_manager_section' + ); + + add_settings_field( + 'redirect_type', + '重定向类型', + array($this, 'redirect_type_callback'), + 'htaccess_manager', + 'htaccess_manager_section' + ); + + add_settings_field( + 'auto_update', + '自动更新', + array($this, 'auto_update_callback'), + 'htaccess_manager', + 'htaccess_manager_section' + ); + } + + public function section_callback() { + echo '
配置您的网站重定向规则。HTTPS重定向是强制的。
'; + } + + public function is_subdomain_callback() { + $value = isset($this->options['is_subdomain']) ? $this->options['is_subdomain'] : false; + ?> + +如果启用,将只强制HTTPS,不处理www和根域名之间的跳转。
+ options['redirect_type']) ? $this->options['redirect_type'] : 'www_to_root'; + ?> + + options['auto_update']) ? $this->options['auto_update'] : true; + ?> + + ++ + +
+如果自动更新失败,您可以手动复制上面的规则到您的.htaccess文件中。
+ +.htaccess文件不存在。
'; + } + ?> +.htaccess文件已更新!
已从.htaccess文件中移除所有HTACCESS Manager规则!
设置已保存并更新了.htaccess文件!
设置已保存!请手动更新.htaccess文件。