在子文件夹中安装Mautic的更优方案咨询
解决Mautic子文件夹部署后.htaccess被更新覆盖的问题
以下是几个高效的解决方案,避免每次更新后手动修改.htaccess:
1. 使用独立配置文件存放自定义规则
Apache支持通过Include指令引入外部配置文件,将你的自定义规则放在不受Mautic更新影响的独立文件中:
- 在主网站的根目录.htaccess中添加一行:
Include /path/to/your/custom-mautic-rules.conf - 创建
custom-mautic-rules.conf文件,将你之前修改的规则写入其中:<If "%{REQUEST_URI} =~ m#^/XXX/(index|index_dev|upgrade/upgrade).php#"> # 这里添加对应的规则内容(比如原.htaccess中该If块内的代码) </If>
Mautic更新只会覆盖自身生成的.htaccess文件,不会触碰这个独立的配置文件。
2. 配置Mautic自动生成适配子目录的.htaccess
修改Mautic的配置文件,让它在更新时自动生成包含子路径的规则:
- 找到Mautic安装目录下的
app/config/local.php文件,添加或修改以下配置:$config['site_url'] = 'https://www.primeogroup.com/XXX'; $config['webroot'] = 'XXX';
这样Mautic在更新时会根据配置的站点URL自动生成适配子目录的.htaccess规则,无需手动修改。
3. 改用Apache虚拟主机配置替代.htaccess
如果你有服务器管理权限,直接在Apache的虚拟主机配置中添加规则,完全绕过.htaccess的限制:
- 打开你的虚拟主机配置文件(通常在
/etc/apache2/sites-available/或/etc/httpd/conf.d/目录下),添加以下配置:<Directory "/var/www/html/XXX"> RewriteEngine On RewriteBase /XXX/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /XXX/index.php [L] # 加入你需要的<If>规则 <If "%{REQUEST_URI} =~ m#^/XXX/(index|index_dev|upgrade/upgrade).php#"> # 对应的规则内容 </If> </Directory>
保存后重启Apache服务,规则直接生效,不受Mautic更新影响。
4. 自动脚本修复(兜底方案)
如果以上方法都不适用,可以写一个简单的Shell脚本,在Mautic更新后自动修复.htaccess:
- 创建脚本文件
fix-mautic-htaccess.sh:#!/bin/bash # 替换为你的.htaccess文件路径 HTACCESS_PATH="/path/to/your/.htaccess" # 替换规则中的路径 sed -i 's/^<If "%{REQUEST_URI} =~ m#^\/(index/<If "%{REQUEST_URI} =~ m#^\/XXX\/(index/' "$HTACCESS_PATH" - 赋予脚本执行权限:
chmod +x fix-mautic-htaccess.sh - 更新Mautic后运行这个脚本,或者设置定时任务定期检查修复。
内容的提问来源于stack exchange,提问作者AFA Med
相关产品推荐
相关产品推荐

