本文约 3,759 字,预计阅读 10 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:什么样的场景还需要在 IIS 上跑 WordPress
大多数 WordPress 站点跑在 Linux 上,但有些场景躲不开 Windows:企业内部系统要与 .NET 服务共存、客户服务器只有 Windows Server、离线内网环境只能用现有 Windows 主机。
IIS 跑 WordPress 完全可行,官方也支持。真正的差异在两处:URL 重写靠 web.config 而不是 .htaccess,以及 NTFS 权限模型与 Linux 完全不同。
原理分析:IIS 与 Linux 环境的核心差异
Linux 下是 Nginx/Apache → PHP-FPM;Windows 下是 IIS → FastCGI → php-cgi.exe。
规则文件也不同:Apache 读 .htaccess,Nginx 靠 server 块,IIS 读站点根目录下的 web.config(XML 格式)。所以网上那些 .htaccess 规则不能直接抄,要翻译成 IIS 的 <rewrite> 节点。
权限方面,IIS 用 IIS_IUSRS 组和应用程序池标识(通常是 IIS AppPool\你的站点名)来访问文件。WordPress 要写 wp-content,就必须给这个身份写权限。
保姆级实操
第一步:安装 IIS 与 URL Rewrite
服务器管理器 → 添加角色和功能 → Web 服务器(IIS),勾选”应用程序开发”下的 CGI。然后单独安装 URL Rewrite Module 与 PHP Manager(可选)。
第二步:安装 PHP
推荐用官方 Non-Thread-Safe 版本,解压到 C:\PHP。修改 php.ini:
extension_dir = "C:\PHP\ext"
extension=mysqli
extension=mbstring
extension=gd
extension=curl
extension=openssl
extension=intl
extension=zip
extension=fileinfo
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300
cgi.fix_pathinfo = 1
date.timezone = Asia/Shanghai
第三步:IIS 注册 FastCGI
IIS 管理器 → 服务器节点 → 处理程序映射 → 添加模块映射:
- 请求路径:
*.php - 模块:
FastCgiModule - 可执行文件:
C:\PHP\php-cgi.exe - 名称:
PHP_via_FastCGI
第四步:安装 MySQL 并建库
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY '强密码';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
第五步:部署 WordPress 文件
解压到 C:\inetpub\wwwroot\mimangfei(或自定义目录),IIS 管理器里添加网站,物理路径指向它。
第六步:写 web.config 伪静态
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="WordPress" patternSyntax="Wildcard">
<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" />
</rule>
</rules>
</rewrite>
<defaultDocument>
<files>
<clear />
<add value="index.php" />
</files>
</defaultDocument>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="67108864" />
</requestFiltering>
</security>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
</staticContent>
</system.webServer>
</configuration>
注意 maxAllowedContentLength 单位是字节,67108864 = 64MB。它和 php.ini 的 upload_max_filesize 是两道独立的门,都要放开。
第七步:配置权限
这是 IIS 环境最容易卡住的一步。打开 wp-content 目录属性 → 安全 → 编辑 → 添加:
IIS AppPool\你的应用程序池名称
给予”修改”权限。命令行方式:
icacls "C:\inetpub\wwwroot\mimangfei\wp-content" /grant "IIS AppPool\mimangfei:(OI)(CI)M" /T
常见踩坑与失败案例
- 内页 404 —— URL Rewrite 模块没装,或 web.config 编码不是 UTF-8(带 BOM 也可能出错)。
- 安装插件提示需要 FTP —— 权限没给对,或
wp-config.php里加define('FS_METHOD', 'direct');可绕过凭据弹窗。 - 500.0 错误 —— 多半是 php-cgi.exe 崩溃。看
C:\PHP下的日志,常见是 VC++ 运行库缺失,装对应版本的 Visual C++ Redistributable。 - 案例:某企业内网站点,上传图片总是失败。排查发现是 IIS 的
maxAllowedContentLength默认 30MB 没改,而 php.ini 已改成 64M,两者取小值生效。 - 中文文件名乱码 —— Windows 下 PHP 处理中文文件名需要确保文件系统编码一致,建议上传前重命名,避免中文路径。
- 性能问题 —— Windows 下 PHP 性能通常低于 Linux 同配置,一定要开 OPcache 和页面缓存插件。
总结
IIS 部署 WordPress 在技术上是完全可行的,关键是跨过三道坎:FastCGI 注册、web.config 重写规则、NTFS 权限。如果条件允许,我仍然建议把 WordPress 放在 Linux 上,把 Windows 留给 .NET 服务;如果必须共存,至少要做动静分离和页面缓存,避免 IIS 成为瓶颈。
