.htaccess配置URL重写遇404错误 请求URL未找到问题排查
问题排查与修复方案
你的第二条RewriteRule无法工作的核心原因是正则表达式开头多了斜杠/。在.htaccess文件中,RewriteRule匹配的请求路径是去掉了开头斜杠的(比如请求example.com/specialities/23/ent,实际匹配的是specialities/23/ent,而非/specialities/23/ent),带开头斜杠的正则永远无法匹配到请求路径,直接导致404错误。
另外,RewriteCond %{REQUEST_FILENAME} !-f仅对紧随其后的RewriteRule生效,如果需要统一排除真实存在的静态文件(比如图片、CSS等)被错误重写,可以把这个条件移到所有规则之前;如果不需要对第一条doctor规则生效,也可以单独保留在specialities规则前。
修改后的.htaccess代码
方案一:统一排除真实文件(推荐)
RewriteEngine on # 排除真实存在的文件,避免静态资源被错误重写 RewriteCond %{REQUEST_FILENAME} !-f # Doctor规则 RewriteRule ^doctor/([0-9]+)/([^/.]+)$ doctor_details.php?id=$1&name=$2 [NC,L] # Specialities规则(去掉开头的斜杠) RewriteRule ^specialities/([0-9]+)/([^/.]+)$ speciality_details.php?id=$1&name=$2 [NC,L]
方案二:仅给specialities规则保留文件排除条件
RewriteEngine on # Doctor规则(原逻辑不变) RewriteRule ^doctor/([0-9]+)/([^/.]+)$ doctor_details.php?id=$1&name=$2 [NC,L] # Specialities规则(修正斜杠问题) RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^specialities/([0-9]+)/([^/.]+)$ speciality_details.php?id=$1&name=$2 [NC,L]
额外说明
[NC]标志表示忽略大小写匹配,[L]标志表示这是最后一条匹配规则,避免后续规则干扰当前匹配结果。- 确保服务器已启用mod_rewrite模块,且Apache配置中对应目录设置了
AllowOverride All,允许.htaccess文件生效。
内容的提问来源于stack exchange,提问作者Ann
相关产品推荐
相关产品推荐

