GoDaddy Windows共享主机不支持.htaccess和mod_rewrite,必须改用web.config配置IIS重写规则,且需同步调整ThinkPHP路由设置以确保伪静态生效。

GoDaddy 的 Windows 共享主机不支持 .htaccess 和 Apache 的 mod_rewrite,直接套用 Linux 下的 ThinkPHP 伪静态规则会完全失效——这不是配置写得不对,而是服务器根本不认。
GoDaddy Windows 主机无法启用 mod_rewrite
GoDaddy 的 Windows 共享主机(如 Classic Hosting)默认运行 IIS,不是 Apache。它不加载 mod_rewrite.so,也不解析 .htaccess 文件。你上传再标准的 RewriteRule 规则,服务器会直接忽略,或返回 500 错误。
- 检查
phpinfo()页面,搜索Loaded Modules,不会出现mod_rewrite -
.htaccess文件在 GoDaddy Windows 环境下无任何作用,删掉或留着都一样 - 试图通过
AllowOverride FileInfo或修改httpd.conf来开启重写?不可能——你没有服务器配置权限
唯一可行方案:改用 IIS 的 web.config 重写规则
GoDaddy Windows 主机支持 IIS URL Rewrite 模块(前提是已启用),需用 web.config 替代 .htaccess,且规则语法完全不同。
- 在网站根目录新建文件
web.config(注意大小写和扩展名) - 内容必须是标准 XML 格式,不能复制 Apache 规则粘贴进去
- ThinkPHP 5/6 的 pathinfo 模式对应规则示例(适配
index.php/s/xxx或/xxx):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ThinkPHP" stopProcessing="true">
<match url="^(.*)$" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php?s={R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
-
url="index.php?s={R:1}"是关键:ThinkPHP 默认读取$_GET['s']解析路由,不能写成index.php/{R:1} - 若使用子目录部署(如
https://yoursite.com/sub/),需把<action>中的index.php改为相对路径,例如sub/index.php?s={R:1} - GoDaddy 有些旧版 Windows 主机未预装 URL Rewrite Module,此时会报 500 错误——只能联系客服确认是否支持,不支持就只能换主机
ThinkPHP 路由配置必须同步调整
即使 web.config 生效,如果框架没设对,请求仍会 404。重点检查两个地方:
立即学习“PHP免费学习笔记(深入)”;
- 确认
config/app.php中'url_route_on' => true已开启(TP5/6 均需) - 禁用
url_html_suffix:设为'',否则生成的链接带.html后缀,而web.config规则没匹配该后缀,导致跳转失败 - 避免使用
__ROOT__拼接 URL,改用url()辅助函数生成地址,确保路径与重写逻辑一致 - TP6 若启用了多应用模式,
s参数需包含应用名,如index.php?s=api/v1/user,路由定义时注意命名空间前缀
最常被忽略的一点:web.config 的 <action type="Rewrite"> 是内部重写,不改变浏览器地址栏;但如果你在路由里写了重定向(比如 redirect()),而目标 URL 又没被 web.config 捕获,就会断链。所有对外暴露的 URL,必须能被 web.config 的 <match url="..."> 覆盖到。



















