You pick a theme or plugin zip, a video or a big PDF, press Install or Upload, and instead of a progress bar you get a white page: "The link you followed has expired. Please try again." Nothing expired. The file is bigger than your host lets one upload be, so the server throws the upload away before WordPress sees it, and WordPress, finding the form arrived empty, falls back to its generic "expired link" message. Raise the host's limit or put the file on the server another way. Below is a rebuilt example (not a real client), then the safe order of steps.
Different things produce the same message, and one look tells them apart.
.htaccess and of any php.ini or .user.ini next to wp-config.php.upload_max_filesize = 64M post_max_size = 64M max_execution_time = 300 max_input_time = 300On cPanel hosts this is "MultiPHP INI Editor" or "Select PHP Version", then Options. Many managed hosts have a "PHP settings" page instead. Pick a number a little above your biggest file rather than the largest the box allows. Then reload Media, Add New: the "Maximum upload file size" line should show the new number.
.user.ini (or php.ini, whichever your host's help pages name) next to wp-config.php containing the four lines above. These files are re-read on a timer, so allow 5 minutes before testing..htaccess as php_value upload_max_filesize 64M and so on. On most modern hosts that line is not allowed and the whole site answers "500 Internal Server Error". If that happens, delete exactly the lines you added and the site comes straight back.wp-content/themes/ or wp-content/plugins/ with the host's file manager or SFTP, then activate it from the dashboard. For video, upload it to YouTube or Vimeo and paste the link into the page: a big video served from your own site is slow for every visitor anyway.| What you find | What it means | Usual fix |
|---|---|---|
| Theme or plugin zip bigger than "Maximum upload file size" | The upload is over upload_max_filesize / post_max_size | Raise both in the control panel, or copy the unzipped folder by file manager |
| Limit already raised, big uploads still fail partway | The upload takes longer than the time limits | Raise max_execution_time and max_input_time |
| "413 Request Entity Too Large" instead of the expired message | The web server (often nginx) refuses before PHP is asked | Host raises client_max_body_size |
| Whole site shows "500 Internal Server Error" after an edit | php_value lines in .htaccess are not allowed on this host | Remove the added lines; use the panel or .user.ini instead |
| Once, after a page sat open for hours | The page's security code expired | Reload and save again |
| Visitors see it on a front-end form | A cache is serving a stale copy of the form page | Exclude that page from caching, purge |
.htaccess or wp-config.php without a copy you can put back. One wrong line takes the whole site down, not just the upload.If you can reach the control panel, the steps above are usually enough. If the site broke while you were trying, or you need the new theme or plugin in today, that is what the box below is for. Related: a "critical error on this website" after the upload finally works means the new theme or plugin itself is the problem, and a blank white page is the same thing with the message hidden.