.htaccess添加RewriteRule规则报Bad flag delimiter错误求助
问题成因
- 报错直接触发点是
RewriteRule规则的标记位语法错误:当前写法为[QSA, L],逗号与L标记之间存在多余空格。Apache mod_rewrite模块解析规则标记时,仅支持无空格的逗号作为标记分隔符,出现多余空格就会抛出bad flag delimiters错误,导致整个.htaccess配置加载失败,站点访问中断。 - 额外配置隐患:你贴出的代码中
<Limit>配置块被写成了HTML转义格式<Limit PUT DELETE OPTIONS>,如果实际.htaccess文件中确实写入的是转义字符而非原生尖括号,这部分配置不会被Apache识别,会被当作普通无效文本处理。
修复步骤
- 修正重写规则的标记写法,删除逗号后的多余空格,修正后的重写规则段如下:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)crm.php(.*)$ /admin/crm.php [QSA,L]
- 检查请求方法限制块的写法,确保文件中使用原生尖括号包裹标签,不要使用HTML转义字符,修正后该段配置为:
<Limit PUT DELETE OPTIONS> Order allow,deny Allow from all </Limit>
- 保存修改后的.htaccess文件即可,.htaccess是目录级动态配置,每次请求会自动重新加载,无需重启Apache服务,直接刷新站点验证访问即可,错误日志中的标记分隔符报错会同步消失。
内容的提问来源于stack exchange,提问作者Drew Adkins
相关产品推荐
相关产品推荐

