You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SEF URL含'drills'时无法正常工作的问题求助

为什么SEF URL中使用'drills'会触发404错误?

以下是几个最可能的原因及排查方向:

1. 服务器安全模块的拦截

部分主机服务商的服务器会启用mod_security或类似安全模块,这类模块预设了敏感词规则,drills有可能被误判为和攻击工具、恶意行为相关的关键词,直接拦截请求,导致你的重写规则根本没机会执行。

  • 排查方法:查看Apache错误日志(通常路径为/var/log/apache2/error.log,或主机商提供的日志面板),如果发现包含mod_security、blocked或drills的拦截记录,即可确认。可联系主机商调整规则,或在权限允许的情况下临时禁用该模块测试。

2. 服务器上存在同名文件/目录

虽然你的规则添加了RewriteCond %{REQUEST_FILENAME} !-f和!-d,但如果服务器根目录下存在drills命名的目录、文件,甚至隐藏文件/符号链接,都会让这两个条件不成立,重写规则被跳过。

  • 排查方法:通过SSH执行ls -la /path/to/your/web/root,查看是否有drills相关条目(空目录也会触发条件)。如果存在,删除或重命名该条目即可。

3. 其他重写规则的干扰

如果你的.htaccess文件还有其他规则,或者服务器级配置文件(如httpd.conf)中有匹配drills的规则,且这些规则在你的重写规则之前执行,就会优先处理请求,导致你的规则失效。

  • 排查方法:创建干净的测试用.htaccess,只保留以下代码,测试domain.com/drills/1是否正常:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^drills/([0-9])/?$ /index.php?drill=$1 [QSA,NC,L]

如果测试生效,说明是原有.htaccess中其他规则的问题,逐一排查即可。

4. 缓存导致的旧响应残留

浏览器或服务器的缓存可能保留了之前的404错误响应,即使修改了规则,仍会返回错误页面。

  • 排查方法:用无缓存方式测试,比如执行curl命令:curl -I domain.com/drills/1,或在浏览器中按Ctrl+Shift+R强制刷新,查看是否生效。

内容的提问来源于stack exchange,提问作者user3914769

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:01:29