本地正常的.htaccess规则在GoDaddy主机失效,访问site.com/Downloads报404
我的.htaccess配置在本地XAMPP环境中运行正常,配置内容如下:
RewriteEngine on RewriteBase / Options +FollowSymLinks Options -MultiViews Options -Indexes DirectorySlash Off RewriteCond %{HTTP_USER_AGENT} libwww-perl.* RewriteRule .* ? [F,L] RewriteCond %{DOCUMENT_ROOT}/templates/$1\.tpl -f RewriteRule ^([\w\-.\s]+)$ index.php?page=$1 [QSA,NC,L] ErrorDocument 404 /sources/404.php
但将该配置部署到GoDaddy主机后,访问site.com/Downloads时会出现404错误,本地环境无此问题。请问哪里配置出错了?
解决思路与修正方案
排查文件名大小写问题:本地XAMPP基于Windows系统,文件名不区分大小写;但GoDaddy主机是Linux系统,大小写严格敏感。如果你的模板文件是
downloads.tpl(小写),而请求的是Downloads(首字母大写),就会导致RewriteCond判断文件不存在,无法触发重写规则,直接返回404。务必确保请求路径和模板文件名的大小写完全匹配。调整
%{DOCUMENT_ROOT}的路径判断:GoDaddy主机的%{DOCUMENT_ROOT}实际路径可能和本地XAMPP不一致,导致模板文件存在性判断失效。可以将条件中的绝对路径改为相对路径测试:RewriteCond ./templates/$1\.tpl -f或者改用
%{REQUEST_URI}关联判断,避免依赖DOCUMENT_ROOT的差异:RewriteCond %{REQUEST_URI} ^/([\w\-.\s]+)$ RewriteCond %{DOCUMENT_ROOT}/templates/%1\.tpl -f RewriteRule ^ index.php?page=%1 [QSA,NC,L]确认RewriteEngine与主机配置:部分GoDaddy主机默认未启用
mod_rewrite模块,需要登录主机控制面板,找到“URL重写”或“Apache模块”选项,确认开启了重写功能;也可以联系主机客服核实模块状态。测试RewriteBase的兼容性:GoDaddy的虚拟主机可能存在隐藏的子目录结构,即使文件放在根目录,
RewriteBase /可能无法正确识别。尝试注释掉RewriteBase /这一行,让Apache自动适配当前目录路径。检查DirectorySlash的冲突:GoDaddy的Apache全局配置可能与
DirectorySlash Off存在冲突,尝试注释掉这一行,访问时手动保证路径末尾无斜杠,看是否能触发重写规则。
内容的提问来源于stack exchange,提问作者Karim

