Apache服务器.htaccess重定向配置问题求助
先理清楚你的核心问题:当前Rewrite规则把非文件/目录的请求导向了http://example.com/test.html,但你实际想要的是指向本地项目http://localhost/project/test。下面一步步帮你排查和修正:
1. 修正.htaccess的规则目标路径
你当前的规则是:
RewriteRule ^(.*)$ test.html [QSA,L]
这里的test.html是相对路径,Apache会基于你设置的RewriteBase /解析成服务器根目录下的文件。如果你的服务器默认域名被设为example.com(比如XAMPP默认配置没调整),就会跳转到http://example.com/test.html。
你需要把目标改成项目对应的绝对路径,比如你的项目在localhost/project下,规则应调整为:
RewriteRule ^(.*)$ /project/test [QSA,L]
注意路径前的斜杠,确保是基于服务器根目录的绝对路径,避免相对路径解析出错。
2. 验证httpd.conf的关键配置
XAMPP的httpd.conf文件里有几个必须检查的点:
- 启用mod_rewrite模块:确认存在
LoadModule rewrite_module modules/mod_rewrite.so这一行,并且前面没有注释符号#。 - 允许.htaccess生效:找到你项目目录对应的
<Directory>块(比如C:\xampp\htdocs\project),把AllowOverride None改成AllowOverride All,这样Apache才会读取执行.htaccess里的规则。 - 确认DocumentRoot:检查
DocumentRoot是否指向C:\xampp\htdocs,如果你的项目在htdocs/project下,这个配置是正确的。
3. 排查hosts文件的干扰
打开C:\Windows\System32\drivers\etc\hosts文件,看看有没有把localhost映射到example.com的配置,比如:
127.0.0.1 example.com
如果有这行,会导致本地请求被解析到example.com,直接删掉这一行,保存后执行命令ipconfig /flushdns刷新DNS缓存。
4. 小技巧:测试规则有效性
可以先在.htaccess里加一条测试规则:
RewriteRule ^test$ /project/test [R=302,L]
然后访问http://localhost/test,看是否跳转到http://localhost/project/test。如果成功,说明Rewrite模块和.htaccess已经生效,再调整回原来的规则即可。
最后别忘了,修改完任何配置后重启XAMPP的Apache服务,否则新配置不会生效哦!
内容的提问来源于stack exchange,提问作者sundowatch

