如何修复WordPress中”您访问的链接已过期”错误
当文件上传或表单提交超过一个或多个PHP运行时限制时,WordPress中的“The link you followed has expired”错误就会被触发——具体涉及upload_max_filesize、post_max_size、max_execution_time或memory_limit。WordPress无法从这些服务器端拒绝中正常恢复,因此会显示这条通用消息,而非具体的PHP错误。
修复方法需要通过您的托管环境所提供的配置层来提高这些PHP指令的值:php.ini、.htaccess、wp-config.php,或控制面板界面。具体使用哪种方法完全取决于您的服务器访问级别——root SSH访问、托管cPanel或受限的共享环境各需要不同的方式。
此错误的实际原因
了解根本原因可以避免您采用错误的修复方法。当WordPress处理上传时,浏览器会向wp-admin/async-upload.php或wp-admin/update.php发送一个multipart POST请求。在WordPress执行任何一行应用代码之前,PHP会根据四个独立限制来评估该请求:
upload_max_filesize— 单个上传文件的硬性上限post_max_size— 整个POST正文的上限,必须*大于*upload_max_filesizemax_execution_time— PHP进程可运行的最大实际秒数memory_limit— PHP进程可用的RAM;图像处理和主题安装对内存需求较高
如果其中任何一项被突破,PHP会静默终止请求。WordPress收到空响应或格式错误的响应,并显示”The link you followed has expired”。该错误并非WordPress的bug——而是PHP在执行服务器策略。
实际中的常见触发场景:
- 在默认上传限制为2 MB的共享主机上安装高级主题(通常为5–30 MB)
- 上传WooCommerce产品CSV导入文件
- 安装包含捆绑资源的插件包
- 通过WordPress仪表盘从备份存档恢复站点
- 运行触及执行时间上限的长时间导入脚本
PHP指令快速参考表
| 指令 | 默认值(典型共享主机) | 建议最低值 | 控制内容 |
|---|---|---|---|
| — | — | — | — |
| `upload_max_filesize` | 2M | 64M–128M | 单个上传文件的最大大小 |
| `post_max_size` | 8M | 128M(必须超过上传限制) | 整个POST请求正文的最大大小 |
| `max_execution_time` | 30 | 300 | PHP终止脚本前的秒数 |
| `max_input_time` | 60 | 300 | PHP解析输入数据所花费的秒数 |
| `memory_limit` | 128M | 256M | 每个PHP进程的RAM |
关键规则:post_max_size必须始终设置为高于upload_max_filesize。如果您设置了upload_max_filesize = 128M但保留了post_max_size = 8M,上传仍会失败,因为POST正文限制会首先被触及。
方法一:编辑php.ini(推荐用于VPS和独立服务器)
这是最可靠且永久的方法。在您拥有root或sudo访问权限的VPS托管或独立服务器环境中,您可以直接控制PHP配置。
找到活动的php.ini文件:
php --ini | grep "Loaded Configuration File"或在WordPress站点内创建一个临时文件:
<?php phpinfo(); ?>在输出中查找Loaded Configuration File行,然后立即删除该文件。
编辑指令:
upload_max_filesize = 128M
post_max_size = 256M
max_execution_time = 300
max_input_time = 300
memory_limit = 256M保存后,重启PHP-FPM或Apache以应用更改:
# For PHP-FPM (most common on modern stacks)
sudo systemctl restart php8.2-fpm
# For Apache with mod_php
sudo systemctl restart apache2
# For Nginx + PHP-FPM
sudo systemctl restart nginx php8.2-fpm验证新值是否生效:
php -r "echo ini_get('upload_max_filesize');"需要了解的边缘情况:在运行多个PHP版本的服务器上(cPanel上的常见配置),每个版本都有独立的php.ini。编辑错误的版本不会产生任何效果。在编辑之前,请确认WordPress正在使用哪个PHP版本。
方法二:使用.htaccess(Apache共享主机)
如果您在没有直接php.ini访问权限的共享主机上,且服务器运行Apache并启用了mod_php或suPHP,您可以使用.htaccess按目录覆盖PHP指令。
通过FTP、SFTP或您的托管文件管理器访问WordPress根目录。打开.htaccess并追加以下代码块:
<IfModule mod_php.c>
php_value upload_max_filesize 128M
php_value post_max_size 256M
php_value max_execution_time 300
php_value max_input_time 300
php_value memory_limit 256M
</IfModule>保存并上传文件,然后测试您的上传。
重要注意事项:
- 此方法在运行PHP-FPM、CGI或FastCGI的服务器上不起作用。在这些技术栈上,
php_value在.htaccess中的指令会导致500内部服务器错误,因为处理PHP的Apache模块不是mod_php。如果保存后出现500错误,请立即删除这些行。 - 在Nginx服务器上,
.htaccess会被完全忽略。请改用php.ini或php.ini用户覆盖文件。 - 某些托管服务商明确禁用了PHP指令的
AllowOverride,即使在Apache上,此方法也会失效。
方法三:向wp-config.php添加指令
此方法使用PHP的ini_set()函数在运行时覆盖指令。它不受Web服务器类型的限制,但受主机的open_basedir和disable_functions限制约束——出于安全原因,某些主机会屏蔽ini_set()。
打开WordPress根目录中的wp-config.php,并在/* That's all, stop editing! Happy publishing. */注释之前添加以下行:
@ini_set( 'upload_max_size', '128M' );
@ini_set( 'post_max_size', '256M' );
@ini_set( 'max_execution_time', '300' );
@ini_set( 'max_input_time', '300' );
@ini_set( 'memory_limit', '256M' );@在ini_set()被禁用时会抑制错误,防止出现白屏。但是,如果主机使用php_admin_value在服务器级别锁定了这些值,ini_set()调用会被静默忽略——值不会改变。
如何验证是否真正生效:
安装免费的Query Monitor插件并检查PHP环境选项卡,或添加临时的phpinfo()调用。如果值仍显示旧限制,则ini_set()正在被更高层级覆盖,您需要使用其他方法。
方法四:在cPanel中调整PHP设置
对于通过cPanel管理的托管环境——包括带cPanel的VPS——您可以通过图形界面修改PHP限制,无需修改任何文件。
步骤:
- 登录cPanel。
- 导航到软件并点击MultiPHP INI Editor。
- 从下拉菜单中选择您WordPress站点的文档根目录。
- 找到并更新以下字段:
upload_max_filesize→128Mpost_max_size→256Mmax_execution_time→300memory_limit→256M
- 点击应用。
或者,如果您的主机使用CloudLinux,可使用Select PHP Version(PHP Selector)。在选项选项卡下,相同的指令以滑块或输入框的形式提供。
cPanel在后台实际执行的操作:它会在您的文档根目录中写入.user.ini文件(用于PHP-FPM)或修改.htaccess(用于mod_php)。如果您之后手动编辑这些文件,可能会覆盖cPanel的更改——请注意这一冲突。
方法五:创建或编辑.user.ini文件(PHP-FPM环境)
这是大多数教程遗漏的方法,但它是PHP-FPM的正确方式——PHP-FPM是几乎所有现代托管技术栈(包括基于Nginx的环境)上的默认PHP处理程序。
在您的WordPress根目录中创建一个名为.user.ini的文件,内容如下:
upload_max_filesize = 128M
post_max_size = 256M
max_execution_time = 300
max_input_time = 300
memory_limit = 256M将其上传到与wp-config.php相同的目录。PHP-FPM会定期扫描.user.ini文件——缓存TTL由user_ini.cache_ttl控制,默认为300秒(5分钟)。更改不会立即生效。如果需要立即生效,请重启PHP-FPM。
sudo systemctl restart php8.2-fpm安全提示:.user.ini文件不应可通过Web访问。如果您使用Apache,请将以下内容添加到您的.htaccess中:
<Files ".user.ini">
Require all denied
</Files>在Nginx上,添加一个location块来拒绝访问:
location ~ /.user.ini {
deny all;
}方法六:联系您的托管服务商
如果上述所有方法都无法改变您通过phpinfo()或Query Monitor验证的PHP值,则主机正在PHP-FPM池级别或通过服务器配置中的php_admin_value指令强制执行限制——这两种情况都无法通过任何用户可访问的文件来覆盖。
在这种情况下,请联系支持并请求具体的提升。提供确切的指令名称和目标值。如果主机拒绝或设置的硬性上限不满足您的需求,请考虑迁移到VPS托管方案,在那里您可以完全控制PHP配置。
诊断实际触发错误的限制
在应用任何修复之前,请使用以下诊断步骤,而非凭猜测:
从命令行检查当前PHP限制:
php -r "echo 'upload_max_filesize: ' . ini_get('upload_max_filesize') . PHP_EOL;
echo 'post_max_size: ' . ini_get('post_max_size') . PHP_EOL;
echo 'max_execution_time: ' . ini_get('max_execution_time') . PHP_EOL;
echo 'memory_limit: ' . ini_get('memory_limit') . PHP_EOL;"检查PHP错误日志以获取实际失败原因:
tail -n 50 /var/log/php/error.log
# or
tail -n 50 /var/log/apache2/error.log查找包含Allowed memory size、Maximum execution time或POST Content-Length的行。具体消息会告诉您确切需要针对哪个指令。
检查您正在上传的文件大小与当前upload_max_filesize的对比。如果文件为45 MB而限制为64 MB,则上传限制不是问题所在——请改为查看post_max_size或memory_limit。
选择正确方法:决策矩阵
| 您的环境 | 推荐方法 |
|---|---|
| — | — |
| 具有root SSH的VPS或独立服务器 | 编辑系统`php.ini`,重启PHP-FPM |
| cPanel共享主机 | MultiPHP INI Editor或PHP Selector |
| Apache共享主机,无cPanel | 使用`php_value`的`.htaccess`(仅限mod_php) |
| Nginx + PHP-FPM,无root访问 | WordPress根目录中的`.user.ini` |
| 任何环境,快速测试 | 使用`ini_set()`的`wp-config.php` |
| 所有方法均失败 | 联系主机或迁移至VPS |
认为问题已解决前的关键技术检查清单
post_max_size设置为高于upload_max_filesize——这是最常见的配置错误- 已通过
phpinfo()或php -r "echo ini_get(...)"验证更改——而非仅凭假设 - 如果直接编辑了
.user.ini或php.ini,已重启PHP-FPM - 正在编辑的
.user.ini或php.ini与实际为WordPress站点提供服务的PHP版本匹配 - 如果您正在安装大型主题或运行图像密集型操作,
memory_limit至少为256M - 已检查错误日志以确认哪个具体限制导致了终止
- 如果使用共享虚拟主机方案,已确认主机的硬性上限——某些服务商无论用户设置如何,都将
upload_max_filesize限制在64M - 修复上传错误后,如果您通过HTTPS访问wp-admin,请验证您的SSL证书是否有效,因为混合内容或证书错误可能产生表面上类似的重定向失败
常见问题
为什么即使我在.htaccess中增加了upload_max_filesize,错误仍然出现?
服务器可能通过FastCGI或PHP-FPM而非mod_php运行PHP。.htaccess中的php_value指令仅由Apache的mod_php处理程序处理。在PHP-FPM技术栈上,请改用WordPress根目录中的.user.ini文件。
upload_max_filesize和post_max_size有什么区别,为什么两者都重要?
upload_max_filesize限制multipart上传中每个单独文件的大小。post_max_size限制整个POST请求正文的总大小,包括文件数据加上表单字段和边界。如果post_max_size小于upload_max_filesize,POST正文限制会首先被触及,PHP会在WordPress能够评估文件大小之前丢弃整个请求。
我在wp-config.php中的ini_set()调用被忽略了。为什么?
主机在PHP-FPM池配置或Apache虚拟主机块中使用了php_admin_value。php_admin_value从应用程序的角度将指令设置为只读——针对这些指令的ini_set()调用会被静默丢弃。只有托管服务商才能更改以这种方式设置的值。
如何验证我的PHP配置更改确实生效了?
在您的WordPress根目录中创建一个包含<?php phpinfo(); ?>的临时文件,在浏览器中访问它,并搜索指令名称。Local Value列显示该目录的有效值。检查完毕后立即删除该文件——将phpinfo()输出公开访问是一个安全风险。
此错误是否可能由PHP上传限制以外的原因引起?
是的。WordPress nonce过期也会产生相同的消息。WordPress nonce默认有效期为24小时。如果用户打开插件上传页面,空闲超过24小时后再提交表单,nonce验证会失败,WordPress会显示”The link you followed has expired”。在这种情况下,只需刷新页面即可生成新的nonce,上传可正常进行——无需更改任何PHP配置。
