将.htaccess转换为web.config以解决Plesk服务器路由问题求助
解决Plesk服务器上非首页链接404问题:将.htaccess转换为web.config
我很清楚你遇到的这个问题——本地用XAMPP(Apache环境)时靠.htaccess搞定的URL重写和跳转,到了Plesk的IIS环境里就失效了,毕竟IIS不认.htaccess,得用web.config来实现相同功能。下面是适配你需求的web.config配置,完全对应你原.htaccess的规则,同时匹配你的前端路由逻辑:
转换后的web.config文件内容
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <!-- 强制跳转HTTPS并添加WWW前缀(对应原.htaccess的HTTPS/WWW规则) --> <rule name="Force HTTPS & WWW" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAny"> <add input="{HTTPS}" pattern="off" /> <add input="{HTTP_HOST}" pattern="^www\." negate="true" /> </conditions> <action type="Redirect" url="https://www.{HTTP_HOST}/{R:1}" redirectType="Permanent" /> </rule> <!-- URL重写到前端控制器index.php(对应原.htaccess的重写规则) --> <rule name="Rewrite to Front Controller" stopProcessing="true"> <match url="^(.*)$" /> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="index.php?{R:1}" appendQueryString="true" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
规则对应说明
- HTTPS/WWW强制跳转:和你原.htaccess的规则完全一致,会把所有非HTTPS、或者不带
www前缀的请求,永久重定向到https://www.d-subidha.com/xxx格式,保证URL的一致性。 - 前端路由重写:当请求的路径不是真实存在的文件或目录时,自动把请求转发到
index.php,同时保留原请求的路径参数(对应原规则里的^(.*)$ index.php?$1 [L,QSA]),这样你的Core\Router就能正常通过$_SERVER['QUERY_STRING']解析路由,匹配对应的控制器和方法。
部署注意事项
- 将这个web.config文件上传到网站根目录(和你的
index.php文件同级)。 - 确认Plesk服务器上的IIS URL重写模块已经启用——如果没开,你可以在Plesk控制面板里开启,或者联系主机商帮忙配置。
- 测试所有路由链接:比如
https://www.d-subidha.com/login、https://www.d-subidha.com/search这类路径,应该能正常加载对应页面,不再返回404。
如果还有问题,可以检查前端路由的规则是否和web.config的重写逻辑兼容,或者确认服务器PHP环境的配置是否和本地XAMPP一致。
内容的提问来源于stack exchange,提问作者Nilmani Gautam
相关产品推荐
相关产品推荐

