{"id":39983,"date":"2026-07-11T22:22:46","date_gmt":"2026-07-12T05:22:46","guid":{"rendered":"https:\/\/dhblog.dream.press\/blog\/?p=39983"},"modified":"2026-07-11T23:07:48","modified_gmt":"2026-07-12T06:07:48","slug":"fixing-the-405-error","status":"publish","type":"post","link":"https:\/\/www.dreamhost.com\/blog\/fixing-the-405-error\/","title":{"rendered":"HTTP 405 Method Not Allowed Error: What It Means And How To Fix It"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">HTTP error codes are useful and frustrating in equal measure. An error page makes it very clear that something went wrong, but most of us haven\u2019t got the faintest clue what \u201c405 Method Not Allowed\u201d actually means, let alone how to fix it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here\u2019s the short version: the page you asked for exists, but the server refused the <i>way<\/i> it was asked for. And the fix is usually within reach \u2014 whether you\u2019re a visitor who just wants the page to load or a site owner whose visitors keep reporting the error.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this guide, we\u2019ll explain what the 405 error means, what causes it, how to diagnose it, and how to fix it for good.<\/p>\n\n\n\n<h2 id=\"h-what-is-the-405-method-not-allowed-error\" class=\"wp-block-heading\">What Does HTTP 405 Method Not Allowed Mean?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">HTTP 405 Method Not Allowed is a client-error status code meaning the server recognized your request method \u2014 like GET or POST \u2014 but the URL you asked for doesn\u2019t support it. Unlike a 404, the page exists; it just can\u2019t be accessed the way it was requested.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Every time your browser talks to a web server, it uses an HTTP method (sometimes called a verb) to say what it wants: <b>GET<\/b> to fetch a page, <b>POST<\/b> to submit form data, <b>PUT<\/b> or <b>DELETE<\/b> to change things via an API, and so on. Per the current HTTP specification (<a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc9110#name-405-method-not-allowed\" target=\"_blank\" rel=\"noopener\">RFC 9110<\/a>), a server answering with 405 must also send an <b>Allow<\/b> header listing the methods that URL <i>does<\/i> support. Not every server complies \u2014 nginx often omits it on its static-file 405s \u2014 but when the header is there, it makes this error unusually easy to diagnose, as we\u2019ll see below.<\/p>\n\n\n\n\n\n<div class=\"glossary-term\">\n\t<a\n\t\tclass=\"glossary-term__above-title\"\n\t\thref=\"\"\n\t\ttarget=\"_blank\"\n\t\trel=\"noopener noreferrer\"\n\t>\n\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 640 512\"><path d=\"M320 32c-8.1 0-16.1 1.4-23.7 4.1L15.8 137.4C6.3 140.9 0 149.9 0 160s6.3 19.1 15.8 22.6l57.9 20.9C57.3 229.3 48 259.8 48 291.9v28.1c0 28.4-10.8 57.7-22.3 80.8c-6.5 13-13.9 25.8-22.5 37.6C0 442.7-.9 448.3 .9 453.4s6 8.9 11.2 10.2l64 16c4.2 1.1 8.7 .3 12.4-2s6.3-6.1 7.1-10.4c8.6-42.8 4.3-81.2-2.1-108.7C90.3 344.3 86 329.8 80 316.5V291.9c0-30.2 10.2-58.7 27.9-81.5c12.9-15.5 29.6-28 49.2-35.7l157-61.7c8.2-3.2 17.5 .8 20.7 9s-.8 17.5-9 20.7l-157 61.7c-12.4 4.9-23.3 12.4-32.2 21.6l159.6 57.6c7.6 2.7 15.6 4.1 23.7 4.1s16.1-1.4 23.7-4.1L624.2 182.6c9.5-3.4 15.8-12.5 15.8-22.6s-6.3-19.1-15.8-22.6L343.7 36.1C336.1 33.4 328.1 32 320 32zM128 408c0 35.3 86 72 192 72s192-36.7 192-72L496.7 262.6 354.5 314c-11.1 4-22.8 6-34.5 6s-23.5-2-34.5-6L143.3 262.6 128 408z\"\/><\/svg>\n\t\t<span><\/span>\n\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 384 512\"><path d=\"M342.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L274.7 256 105.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z\"\/><\/svg>\n\t<\/a>\n    <h3>Server<\/h3>\n    <p>A server is a computer that stores data. A web server is a type of server that stores and delivers web pages to users. Web servers are connected to the internet and use HTTP to send web pages to users who request them.<\/p>\n            <a\n            href=\"https:\/\/www.dreamhost.com\/glossary\/hosting\/server\/\"\n                        class=\"btn btn--white-outline btn--sm btn--round\"\n                                    target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            >\n                            Read More                    <\/a>\n\n<\/div>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1600\" height=\"1000\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/What-Is-the-405-Method-Not-Allowed-Error.jpg.webp\" alt=\"What Is the 405 Method Not Allowed Error? The 405 error is a type of HTTP status code\" class=\"wp-image-39987 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/What-Is-the-405-Method-Not-Allowed-Error.jpg.webp 1600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/What-Is-the-405-Method-Not-Allowed-Error-300x188.jpg 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/What-Is-the-405-Method-Not-Allowed-Error-1024x640.jpg 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/What-Is-the-405-Method-Not-Allowed-Error-768x480.jpg 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/What-Is-the-405-Method-Not-Allowed-Error-1536x960.jpg 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/What-Is-the-405-Method-Not-Allowed-Error-600x375.jpg.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/What-Is-the-405-Method-Not-Allowed-Error-1200x750.jpg.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/What-Is-the-405-Method-Not-Allowed-Error-730x456.jpg.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/What-Is-the-405-Method-Not-Allowed-Error-1460x913.jpg.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/What-Is-the-405-Method-Not-Allowed-Error-784x490.jpg.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/What-Is-the-405-Method-Not-Allowed-Error-1568x980.jpg.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/What-Is-the-405-Method-Not-Allowed-Error-877x548.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/1000;\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A persistent 405 status code is a problem for anyone running a website: until you fix it, visitors can\u2019t reach the affected page or complete the affected action. Depending on the server software, the error may appear as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>405 Method Not Allowed<\/li>\n\n\n\n<li>405 Not Allowed (nginx\u2019s wording)<\/li>\n\n\n\n<li>Method Not Allowed<\/li>\n\n\n\n<li>HTTP 405 Error \/ HTTP ERROR 405 (Chrome\u2019s \u201cThis page isn\u2019t working\u201d screen)<\/li>\n\n\n\n<li>HTTP Error 405 \u2013 Method Not Allowed<\/li>\n\n\n\n<li>405 \u2013 HTTP verb used to access this page is not allowed (Microsoft IIS servers)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Different costumes, same error: the server knows the method, and the resource won\u2019t take it.<\/p>\n\n\n\n<h2 id=\"h-what-causes-the-405-error\" class=\"wp-block-heading\">What Causes the 405 Error?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Whenever you visit a web page, your browser sends the hosting server a request, and this whole conversation is regulated by HTTP \u2014 Hypertext Transfer Protocol \u2014 which uses status codes to report progress and problems. Codes in the 400s report client errors: something about the request itself that the server wouldn\u2019t accept.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1600\" height=\"978\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Status-Codes.jpg.webp\" alt=\"List of status codes. Codes in the 400s relate to client-side errors.\" class=\"wp-image-39988 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Status-Codes.jpg.webp 1600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Status-Codes-300x183.jpg 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Status-Codes-1024x626.jpg 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Status-Codes-768x469.jpg 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Status-Codes-1536x939.jpg 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Status-Codes-600x367.jpg.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Status-Codes-1200x734.jpg.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Status-Codes-730x446.jpg.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Status-Codes-1460x892.jpg.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Status-Codes-784x479.jpg.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Status-Codes-1568x958.jpg.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Status-Codes-877x536.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/978;\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A 405 specifically means the request\u2019s <i>method<\/i> was the problem. In practice, that traces back to a handful of causes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><b>A form or script sending the wrong method:<\/b> The classic case is a form that POSTs to a page that only accepts GET \u2014 for example, a contact form pointed at a static page instead of its form handler. nginx, for one, rejects a POST sent to a static file with its \u201c405 Not Allowed\u201d page.<\/li>\n\n\n\n<li><b>A redirect quietly changing the method:<\/b> When a POST hits a 301 or 302 redirect (say, from http to https, or non-www to www), browsers typically replay it as a plain GET \u2014 and the destination may not accept that. The method-preserving redirect codes are 307 and 308. This one bites a lot of forms that submit to a URL one redirect away from the final address.<\/li>\n\n\n\n<li><b>Server configuration blocking methods:<\/b> Rules in Apache\u2019s .htaccess or the nginx config can restrict which methods a URL accepts \u2014 deliberately (for security) or accidentally (a misconfigured rewrite).<\/li>\n\n\n\n<li><b>Recent updates or new plugins, themes, and modules:<\/b> A CMS, theme, or plugin change can alter routes and endpoints, or leave behind database changes that break request handling.<\/li>\n\n\n\n<li><b>API method mismatches:<\/b> Calling an API endpoint with a method it doesn\u2019t support (a PUT where only POST is defined, or an OPTIONS preflight the server rejects) returns a 405 straight from the API server.<\/li>\n\n\n\n<li><b>Misdirected DNS:<\/b> If your domain\u2019s records point at the wrong server \u2014 one configured for different rules than your website expects \u2014 requests can land where their methods aren\u2019t allowed.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-what-is-the-difference-between-404-and-405-errors\"><b>What Is the Difference Between 404 and 405 Errors?<\/b><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Both 404 and 405 errors prevent users from accessing content on your website, but they report different problems.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1600\" height=\"660\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2026\/07\/404-vs-405-error-difference-2026.png.webp\" alt=\"404 vs 405: a 404 Page Not Found means the content doesn't exist at the URL, while a 405 Method Not Allowed means the URL exists but doesn't accept that request method.\" class=\"wp-image-85716 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2026\/07\/404-vs-405-error-difference-2026.png.webp 1600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/07\/404-vs-405-error-difference-2026-300x124.png 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/07\/404-vs-405-error-difference-2026-1024x422.png 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/07\/404-vs-405-error-difference-2026-768x317.png 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/07\/404-vs-405-error-difference-2026-1536x634.png 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2026\/07\/404-vs-405-error-difference-2026-600x248.png.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2026\/07\/404-vs-405-error-difference-2026-1200x495.png.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2026\/07\/404-vs-405-error-difference-2026-730x301.png.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2026\/07\/404-vs-405-error-difference-2026-1460x602.png.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2026\/07\/404-vs-405-error-difference-2026-784x323.png.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2026\/07\/404-vs-405-error-difference-2026-1568x647.png.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2026\/07\/404-vs-405-error-difference-2026-877x362.png.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/660;\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/www.dreamhost.com\/blog\/how-to-fix-wordpress-404-error\/\" target=\"_blank\" rel=\"noopener\">404 error code<\/a> shows up when no content exists at the URL \u2014 pages get removed, domains change, links rot. In contrast, a 405 means the content is there, but the request used a method that URL doesn\u2019t accept.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One more sibling worth knowing: a <a href=\"https:\/\/www.dreamhost.com\/blog\/how-to-fix-403-forbidden-error-wordpress\/\" target=\"_blank\" rel=\"noopener\">403 Forbidden<\/a> means the server refuses to authorize the request, no matter the method.<\/p>\n\n\n\n<div class=\"article-newsletter article-newsletter--gradient\">\n\n\n<h2>Get Content Delivered Straight to Your Inbox<\/h2><p>Subscribe now to receive all the latest updates, delivered directly to your inbox.<\/p><form class=\"nwsl-form\" id=\"newsletter_block_\" novalidate><div class=\"messages\"><\/div><div class=\"form-group\"><label for=\"input_newsletter_block_\"><input type=\"email\"name=\"email\"id=\"input_newsletter_block_\"placeholder=\"Enter your email address\"novalidatedisabled=\"disabled\"\/><\/label><button type=\"submit\"class=\"btn btn--brand\"disabled=\"disabled\"><span>Sign Me Up!<\/span><svg width=\"21\" height=\"14\" viewBox=\"0 0 21 14\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<path d=\"M13.8523 0.42524L12.9323 1.34521C12.7095 1.56801 12.7132 1.9304 12.9404 2.14865L16.7241 5.7823H0.5625C0.251859 5.7823 0 6.03416 0 6.3448V7.6573C0 7.96794 0.251859 8.2198 0.5625 8.2198H16.7241L12.9405 11.8535C12.7132 12.0717 12.7095 12.4341 12.9323 12.6569L13.8523 13.5769C14.072 13.7965 14.4281 13.7965 14.6478 13.5769L20.8259 7.39879C21.0456 7.17913 21.0456 6.82298 20.8259 6.60327L14.6477 0.42524C14.4281 0.205584 14.0719 0.205584 13.8523 0.42524Z\" fill=\"white\"\/>\n<\/svg>\n<\/button><\/div><\/form><\/div>\n\n\n<h2 id=\"h-how-to-diagnose-a-405-error\" class=\"wp-block-heading\">How To Diagnose a 405 Error<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before changing anything, spend two minutes finding out <i>which<\/i> request is being refused and what the URL actually allows. A 405 gives you more clues than most errors:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>1. Read the error page\u2019s wording.<\/b> The exact phrasing narrows down the server software: \u201c405 Not Allowed\u201d is nginx, \u201c405 \u2013 HTTP verb used to access this page is not allowed\u201d is Microsoft IIS, and Chrome\u2019s generic \u201cThis page isn\u2019t working \/ HTTP ERROR 405\u201d screen means the server sent no error page of its own.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>2. Ask the server which methods the URL accepts.<\/b> If you\u2019re comfortable with a terminal, send a test request with curl and read the response headers:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ncurl -i -X POST https:\/\/example.com\/some-page\/\n\nHTTP\/1.1 405 Method Not Allowed\nAllow: GET, HEAD\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">When the Allow header is present, that\u2019s the server telling you, in writing, which methods the URL supports (nginx\u2019s static-file 405s often leave it out). If it lists GET but your form sends POST, you\u2019ve found your mismatch.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>3. Check what your browser actually sent.<\/b> Open your browser\u2019s developer tools (F12 in Chrome), select the <b>Network<\/b> tab, and repeat the action that fails. Click the red failing request and look at its method, and whether it followed a redirect first. A POST that turns into a GET after a redirect is the fingerprint of the redirect cause described above.<\/p>\n\n\n\n<h2 id=\"h-how-to-fix-the-405-method-not-allowed-error\" class=\"wp-block-heading\">How To Fix the 405 Method Not Allowed Error<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Just visiting a site that\u2019s throwing this error? Try reloading the page from the address bar (typing the URL and pressing Enter sends a fresh GET), or navigate to the page again from the site\u2019s homepage. If the error only happens when you submit a form, the problem is almost certainly on the site\u2019s end \u2014 the fixes below are for its owner.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Running the site yourself? The status code doesn\u2019t say exactly what\u2019s wrong, so work through this checklist. It\u2019s ordered from the quickest, safest checks down to the last-resort restores.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-1-check-your-links\"><b>1) Check Your Links and Form Actions<\/b><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For security reasons, web servers accept only <a href=\"https:\/\/www.dreamhost.com\/blog\/400-bad-request-error\/\" target=\"_blank\" rel=\"noopener\">specific types of requests<\/a> on each URL. If visitors consistently hit 405 errors, they may be following a bad link \u2014 or submitting a form whose action attribute points at the wrong address (a static page, an old URL, or an address that redirects before it lands).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Crawl your site with the <a href=\"https:\/\/www.deadlinkchecker.com\" target=\"_blank\" rel=\"noopener\">Dead Link Checker<\/a> or a similar free tool, and make sure your social links and landing pages don\u2019t point toward private or retired pages. Then check every form: its action URL should be the final address, with no redirect between the visitor and the handler.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1600\" height=\"758\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Dead-Link-Checker.jpg.webp\" alt=\"If visitors to your site consistently see 405 error codes, it might be because they are following a bad link. You can check your site using the Dead Link Checker or a similar free tool.\" class=\"wp-image-39990 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Dead-Link-Checker.jpg.webp 1600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Dead-Link-Checker-300x142.jpg 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Dead-Link-Checker-1024x485.jpg 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Dead-Link-Checker-768x364.jpg 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Dead-Link-Checker-1536x728.jpg 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Dead-Link-Checker-600x284.jpg.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Dead-Link-Checker-1200x569.jpg.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Dead-Link-Checker-730x346.jpg.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Dead-Link-Checker-1460x692.jpg.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Dead-Link-Checker-784x371.jpg.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Dead-Link-Checker-1568x743.jpg.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Dead-Link-Checker-877x415.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/758;\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-6-confirm-your-web-server-configuration\"><b>2) Check Your Redirects and Rewrite Rules<\/b><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">As we covered above, servers reject requests by design \u2014 if they didn\u2019t block certain methods, your site could easily be overwhelmed by unwanted attention. But like an over-aggressive club doorman, a misconfigured server sometimes blocks the wrong requests.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Two things to inspect in your <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/sections\/5117452597268-Server-configurations\" target=\"_blank\" rel=\"noopener\">server configuration<\/a>:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Redirects that swallow POSTs.<\/b> Point forms and API calls at the final URL (right protocol, right hostname), and reach for the method-preserving 307\/308 codes anywhere a redirect is unavoidable \u2014 the causes section above explains how a 301 or 302 quietly converts a POST. Our <a href=\"https:\/\/www.dreamhost.com\/blog\/guide-to-redirects\/\" target=\"_blank\" rel=\"noopener\">guide to redirects<\/a> covers the differences.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Rewrite rules that return 405 directly.<\/b> We use Apache by default at DreamHost, so you\u2019re looking for the <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/217738987-What-can-I-do-with-an-htaccess-file-\" target=\"_blank\" rel=\"noopener\"><b>.htaccess file<\/b><\/a> in your site\u2019s root directory (on VPS plans you can <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/214880148-Change-your-web-server-to-Nginx\" target=\"_blank\" rel=\"noopener\">switch to nginx<\/a>, whose rules live in the nginx config instead). Open the file and search for <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/215747748-How-can-I-redirect-and-rewrite-my-URLs-with-an-htaccess-file-\" target=\"_blank\" rel=\"noopener\">Rewrite directives<\/a> \u2014 they belong to Apache\u2019s mod_rewrite module. A rule like this deliberately answers a matching request with a 405:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nRewriteRule ^api\/ - &#x5B;R=405,L]\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1600\" height=\"524\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Remove-Rewrite-Commands.jpg.webp\" alt=\"You can try to remove Rewrite Commands.\" class=\"wp-image-39996 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Remove-Rewrite-Commands.jpg.webp 1600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Remove-Rewrite-Commands-300x98.jpg 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Remove-Rewrite-Commands-1024x335.jpg 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Remove-Rewrite-Commands-768x252.jpg 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Remove-Rewrite-Commands-1536x503.jpg 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Remove-Rewrite-Commands-600x197.jpg.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Remove-Rewrite-Commands-1200x393.jpg.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Remove-Rewrite-Commands-730x239.jpg.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Remove-Rewrite-Commands-1460x478.jpg.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Remove-Rewrite-Commands-784x257.jpg.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Remove-Rewrite-Commands-1568x514.jpg.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Remove-Rewrite-Commands-877x287.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/524;\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If a rule like that is catching more traffic than intended, comment it out by adding <strong>#<\/strong> at the start of the line, save, and retest. Change one rule at a time so you know exactly which line was the problem \u2014 and resist the temptation to switch off the whole rewrite engine, since WordPress permalinks depend on it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-5-read-your-server-side-logs\"><b>3) Read Your Server-Side Logs<\/b><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Your <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/sections\/203242117-Logs\" target=\"_blank\" rel=\"noopener\">server-side logs<\/a> record every request \u2014 including the failing one, with its method and status code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The files you\u2019re looking for are <b>error.log<\/b> and <b>access.log<\/b>. With DreamHost, you can <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/216512197-Viewing-your-access-and-error-logs-via-SFTP\" target=\"_blank\" rel=\"noopener\">view them via SFTP<\/a> (Secure File Transfer Protocol): in your FTP client, open the <b>\/logs<\/b> directory in your user folder, pick the site you want to check, open the most recent directory starting with <b>http<\/b>, and read the log file inside with any text editor.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1600\" height=\"758\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Read-Your-Server-Side-Logs.jpg.webp\" alt=\"You can also find clues in the server-side logs\" class=\"wp-image-39994 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Read-Your-Server-Side-Logs.jpg.webp 1600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Read-Your-Server-Side-Logs-300x142.jpg 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Read-Your-Server-Side-Logs-1024x485.jpg 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Read-Your-Server-Side-Logs-768x364.jpg 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Read-Your-Server-Side-Logs-1536x728.jpg 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Read-Your-Server-Side-Logs-600x284.jpg.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Read-Your-Server-Side-Logs-1200x569.jpg.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Read-Your-Server-Side-Logs-730x346.jpg.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Read-Your-Server-Side-Logs-1460x692.jpg.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Read-Your-Server-Side-Logs-784x371.jpg.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Read-Your-Server-Side-Logs-1568x743.jpg.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Read-Your-Server-Side-Logs-877x415.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/758;\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In access.log, find the requests that returned 405 and note the method and URL on each; that pairing tells you exactly which rule or endpoint to inspect next.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-2-check-your-updates\"><b>4) Check Your Updates<\/b><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Have you updated your <a href=\"https:\/\/www.dreamhost.com\/blog\/comprehensive-guide-to-content-management-systems\/\" target=\"_blank\" rel=\"noopener\">content management system<\/a>, your theme, or a plugin recently? That might be why you\u2019re suddenly seeing 405 Method Not Allowed messages.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/215300747-Automatic-Updates-for-DreamHost-WordPress-installations\" target=\"_blank\" rel=\"noopener\">Updates<\/a> are essential for maintaining good <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/215947927-Enable-extra-web-security-on-a-website\" target=\"_blank\" rel=\"noopener\">website security<\/a>, fixing bugs, and unlocking new features. But occasionally, a fresh update introduces new gremlins.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you\u2019re unsure whether something updated recently, log in to your WordPress admin and open <b>Dashboard &gt; Updates<\/b>. You\u2019ll see when WordPress last checked for updates, and you can <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/360037291651-Manually-updating-WordPress\" target=\"_blank\" rel=\"noopener\">check manually<\/a> if needed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If an update did break your site, roll back to the previous version of the system, theme, or plugin that\u2019s causing problems. WordPress users can revert core with the community-maintained <a href=\"https:\/\/wordpress.org\/plugins\/wp-downgrade\/\" target=\"_blank\" rel=\"noopener\">WP Downgrade<\/a> plugin \u2014 its own updates have been sparse, so confirm it\u2019s compatible with your WordPress version before relying on it.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1600\" height=\"568\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Roll-Back-Recent-Updates-WP-Downgrade-Plug-In.jpg.webp\" alt=\"Updating your content management system, your theme, or even a plugin recently might be why you\u2019re suddenly seeing 405 Method Not Allowed error messages.\" class=\"wp-image-39991 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Roll-Back-Recent-Updates-WP-Downgrade-Plug-In.jpg.webp 1600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Roll-Back-Recent-Updates-WP-Downgrade-Plug-In-300x107.jpg 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Roll-Back-Recent-Updates-WP-Downgrade-Plug-In-1024x364.jpg 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Roll-Back-Recent-Updates-WP-Downgrade-Plug-In-768x273.jpg 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Roll-Back-Recent-Updates-WP-Downgrade-Plug-In-1536x545.jpg 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Roll-Back-Recent-Updates-WP-Downgrade-Plug-In-600x213.jpg.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Roll-Back-Recent-Updates-WP-Downgrade-Plug-In-1200x426.jpg.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Roll-Back-Recent-Updates-WP-Downgrade-Plug-In-730x259.jpg.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Roll-Back-Recent-Updates-WP-Downgrade-Plug-In-1460x518.jpg.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Roll-Back-Recent-Updates-WP-Downgrade-Plug-In-784x278.jpg.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Roll-Back-Recent-Updates-WP-Downgrade-Plug-In-1568x557.jpg.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Roll-Back-Recent-Updates-WP-Downgrade-Plug-In-877x311.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/568;\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-how-to-downgrade-wordpress-plugins-and-themes\">How To Downgrade WordPress Plugins and Themes<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">If you believe a specific theme or plugin is the culprit, we recommend the <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/10434999845780-Using-the-WP-Rollback-plugin\" target=\"_blank\" rel=\"noopener\">WP Rollback plugin<\/a>. Once activated, it lets you downgrade any plugin or theme installed from the WordPress.org directory.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Open <b>Plugins &gt; Installed Plugins<\/b> or <b>Appearance &gt; Themes<\/b> in your WordPress admin, and you\u2019ll see a \u201cRollback\u201d option for each. Click it, choose the version you want to restore, and once the downgrade completes, make sure the plugin or theme is activated again.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1600\" height=\"820\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/WP-Rollback-Plug-In.jpg.webp\" alt=\"WP Rollback will allow you to choose the exact version you want to restore.\" class=\"wp-image-39992 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/WP-Rollback-Plug-In.jpg.webp 1600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/WP-Rollback-Plug-In-300x154.jpg 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/WP-Rollback-Plug-In-1024x525.jpg 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/WP-Rollback-Plug-In-768x394.jpg 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/WP-Rollback-Plug-In-1536x787.jpg 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/WP-Rollback-Plug-In-600x308.jpg.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/WP-Rollback-Plug-In-1200x615.jpg.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/WP-Rollback-Plug-In-730x374.jpg.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/WP-Rollback-Plug-In-1460x748.jpg.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/WP-Rollback-Plug-In-784x402.jpg.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/WP-Rollback-Plug-In-1568x804.jpg.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/WP-Rollback-Plug-In-877x449.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/820;\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-3-uninstall-new-plugins-modules-and-themes-nbsp\"><b>5) Uninstall New Plugins, Modules, and Themes<\/b><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Just as updates to existing plugins and themes can mess things up, so can brand-new additions \u2014 especially anything that touches requests, like a security, firewall, caching, or redirect plugin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the 405s started right after you installed something new, deactivate it. In <a href=\"https:\/\/www.dreamhost.com\/wordpress\/\" target=\"_blank\" rel=\"noopener\">WordPress<\/a>, go to <b>Plugins<\/b> or <b>Appearance &gt; Themes<\/b> in the admin area and hit <b>Deactivate<\/b> on the newcomer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Not sure which plugin is causing the problem? You can disable all of them at once via <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/115000675027-FTP-overview-and-credentials\" target=\"_blank\" rel=\"noopener\">FTP<\/a> or <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/216041267-SSH-overview\" target=\"_blank\" rel=\"noopener\">SSH<\/a>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In your FTP\/SSH client, head to your WordPress site directory<\/li>\n\n\n\n<li>Navigate to <b>wp-content <\/b>and right-click on <b>plugins<\/b><\/li>\n\n\n\n<li>Select <b>Rename<\/b><\/li>\n\n\n\n<li>Change the name of the folder to <b>plugins_OFF<\/b><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">This immediately deactivates every plugin. To reverse it, rename the folder back to <b>plugins<\/b>, then reactivate plugins one by one until the error returns \u2014 the last one you switched on is your culprit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To remove a theme via FTP\/SSH, open <b>wp-content\/themes<\/b> and delete (or rename) the theme\u2019s folder \u2014 but keep a backup copy, just in case the theme isn\u2019t to blame.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-7-fix-file-permissions\"><b>6) Fix File Permissions<\/b><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Another reason a server might reject requests is misconfigured <a href=\"https:\/\/www.dreamhost.com\/glossary\/hosting\/permissions\/\" target=\"_blank\" rel=\"noopener\">site permissions<\/a> \u2014 for instance, a file that an admin can reach but a general visitor\u2019s request can\u2019t.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The fastest way to check is through your host\u2019s file manager or your FTP client: right-click a file and open its permissions (often labeled <b>CHMOD<\/b> or \u201cfile attributes\u201d). You may discover that an important file lost its public read access.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1600\" height=\"690\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Fix-File-Permissions.jpg.webp\" alt=\"Your server might be blocking access to certain content is because your site permissions are misconfigured.\" class=\"wp-image-39997 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Fix-File-Permissions.jpg.webp 1600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Fix-File-Permissions-300x129.jpg 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Fix-File-Permissions-1024x442.jpg 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Fix-File-Permissions-768x331.jpg 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Fix-File-Permissions-1536x662.jpg 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Fix-File-Permissions-600x259.jpg.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Fix-File-Permissions-1200x518.jpg.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Fix-File-Permissions-730x315.jpg.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Fix-File-Permissions-1460x630.jpg.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Fix-File-Permissions-784x338.jpg.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Fix-File-Permissions-1568x676.jpg.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Fix-File-Permissions-877x378.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/690;\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If you\u2019re running your own private server or <a href=\"https:\/\/www.dreamhost.com\/hosting\/vps\/\" target=\"_blank\" rel=\"noopener\">VPS<\/a>, also check the server\u2019s own settings \u2014 it might be configured to accept only certain HTTP methods for specific file types.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-8-debug-your-code\"><b>7) Debug Your Code<\/b><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ultimately, the cause of your 405 errors might live in the code of your website or web app \u2014 a route that declares the wrong method, a webhook handler that never registered, an AJAX call POSTing to the wrong endpoint.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To diagnose problems like these, follow a full <a href=\"https:\/\/www.dreamhost.com\/glossary\/hosting\/debugging\/\" target=\"_blank\" rel=\"noopener\">debugging<\/a> process: create a complete local copy of your website (or use a staging environment), recreate the error, and trace the failing request. The exact process depends on your CMS, scripts, and languages. If your site runs on WordPress and you\u2019re confident in the command line, <a href=\"https:\/\/www.dreamhost.com\/blog\/guide-to-wp-cli\/\" target=\"_blank\" rel=\"noopener\">WP-CLI<\/a> is a great tool for the job.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-4-restore-your-database-nbsp\"><b>8) Restore Your Database<\/b><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Plugins and themes usually need at least some access to <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/221610868-Finding-your-database-login-credentials\" target=\"_blank\" rel=\"noopener\">your database<\/a> to do their jobs. Sometimes they get a little unruly and change parts of the database that are none of their business \u2014 and those changes survive even after you remove the offending plugin or theme.<\/p>\n\n\n\n\n\n<div class=\"glossary-term\">\n\t<a\n\t\tclass=\"glossary-term__above-title\"\n\t\thref=\"\"\n\t\ttarget=\"_blank\"\n\t\trel=\"noopener noreferrer\"\n\t>\n\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 640 512\"><path d=\"M320 32c-8.1 0-16.1 1.4-23.7 4.1L15.8 137.4C6.3 140.9 0 149.9 0 160s6.3 19.1 15.8 22.6l57.9 20.9C57.3 229.3 48 259.8 48 291.9v28.1c0 28.4-10.8 57.7-22.3 80.8c-6.5 13-13.9 25.8-22.5 37.6C0 442.7-.9 448.3 .9 453.4s6 8.9 11.2 10.2l64 16c4.2 1.1 8.7 .3 12.4-2s6.3-6.1 7.1-10.4c8.6-42.8 4.3-81.2-2.1-108.7C90.3 344.3 86 329.8 80 316.5V291.9c0-30.2 10.2-58.7 27.9-81.5c12.9-15.5 29.6-28 49.2-35.7l157-61.7c8.2-3.2 17.5 .8 20.7 9s-.8 17.5-9 20.7l-157 61.7c-12.4 4.9-23.3 12.4-32.2 21.6l159.6 57.6c7.6 2.7 15.6 4.1 23.7 4.1s16.1-1.4 23.7-4.1L624.2 182.6c9.5-3.4 15.8-12.5 15.8-22.6s-6.3-19.1-15.8-22.6L343.7 36.1C336.1 33.4 328.1 32 320 32zM128 408c0 35.3 86 72 192 72s192-36.7 192-72L496.7 262.6 354.5 314c-11.1 4-22.8 6-34.5 6s-23.5-2-34.5-6L143.3 262.6 128 408z\"\/><\/svg>\n\t\t<span><\/span>\n\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 384 512\"><path d=\"M342.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L274.7 256 105.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z\"\/><\/svg>\n\t<\/a>\n    <h3>Database<\/h3>\n    <p>A database is a collection of information accessible to computers. Databases are used to store information such as customer records, product catalogs, and financial transactions.<\/p>\n            <a\n            href=\"https:\/\/www.dreamhost.com\/glossary\/hosting\/database\/\"\n                        class=\"btn btn--white-outline btn--sm btn--round\"\n                                    target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            >\n                            Read More                    <\/a>\n\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">There are two ways out: dig through your <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/360003819912-Viewing-your-database-logs\" target=\"_blank\" rel=\"noopener\">database logs<\/a> for the problematic change (you\u2019re looking for INSERT, UPDATE, or DELETE statements around the time the errors started \u2014 a job for someone comfortable reading SQL), or simply <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/215100557-Restore-a-database-in-the-panel\" target=\"_blank\" rel=\"noopener\">restore your database<\/a> to a version from before the trouble began.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1600\" height=\"758\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Restore-Your-Database.jpg.webp\" alt=\"If you don\u2019t have developer-level skills, you can try to restoring your database to a previous version.\" class=\"wp-image-39993 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Restore-Your-Database.jpg.webp 1600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Restore-Your-Database-300x142.jpg 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Restore-Your-Database-1024x485.jpg 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Restore-Your-Database-768x364.jpg 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Restore-Your-Database-1536x728.jpg 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Restore-Your-Database-600x284.jpg.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Restore-Your-Database-1200x569.jpg.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Restore-Your-Database-730x346.jpg.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Restore-Your-Database-1460x692.jpg.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Restore-Your-Database-784x371.jpg.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Restore-Your-Database-1568x743.jpg.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Restore-Your-Database-877x415.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/758;\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">DreamHost automatically backs up your database daily; the <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/215100557-Restore-a-database-in-the-panel\" target=\"_blank\" rel=\"noopener\">restore guide<\/a> walks through recovering one from the panel. If you\u2019re not sure what you\u2019re looking at in the logs, avoid making modifications and <a href=\"https:\/\/www.dreamhost.com\/pro-services\/development\/\" target=\"_blank\" rel=\"noopener\">consult a professional<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-10-double-check-your-a-records\"><b>9) Double-Check Your A Records<\/b><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Almost there: make sure the <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/360035516812#A_record\" target=\"_blank\" rel=\"noopener\">A records<\/a> for your domain are configured correctly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In some cases, you may see 405 errors if your A records point at the wrong server. For instance, a server set up to host your website may have different method rules than one set up to host an <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/217560167-Application-programming-interface-overview\" target=\"_blank\" rel=\"noopener\">API<\/a> (Application Programming Interface). Check your DNS records wherever you manage your domain, and confirm each A record points at the server you expect.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1600\" height=\"632\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Double-Check-Your-A-Records.jpg.webp\" alt=\"In some cases, you may see 405 errors if your A records are pointing towards the wrong server.\" class=\"wp-image-39999 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Double-Check-Your-A-Records.jpg.webp 1600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Double-Check-Your-A-Records-300x119.jpg 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Double-Check-Your-A-Records-1024x404.jpg 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Double-Check-Your-A-Records-768x303.jpg 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Double-Check-Your-A-Records-1536x607.jpg 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Double-Check-Your-A-Records-600x237.jpg.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Double-Check-Your-A-Records-1200x474.jpg.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Double-Check-Your-A-Records-730x288.jpg.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Double-Check-Your-A-Records-1460x577.jpg.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Double-Check-Your-A-Records-784x310.jpg.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Double-Check-Your-A-Records-1568x619.jpg.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Double-Check-Your-A-Records-877x346.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/632;\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-9-restore-your-whole-website\"><b>10) Restore Your Whole Website<\/b><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sometimes the fastest fix is to stop debugging and roll back.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you\u2019ve tried the other fixes and nothing works, you might just need to <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/217906467-Backup-or-restore-your-Dedicated-site-files\" target=\"_blank\" rel=\"noopener\">restore your site<\/a> to how it was before the client errors arrived.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Whoever hosts your website, we always recommend <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/215089918-Back-up-an-account-in-the-panel\" target=\"_blank\" rel=\"noopener\">making regular backups<\/a> and keeping a copy offline. DreamHost also keeps daily automated backups of hosted sites, so you can roll back to yesterday\u2019s version of your site from the panel \u2014 the <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/215089918-Back-up-an-account-in-the-panel\" target=\"_blank\" rel=\"noopener\">backup and restore guide<\/a> covers the current flow for both regular hosting and DreamPress.<\/p>\n\n\n\n\n\n<div class=\"glossary-term\">\n\t<a\n\t\tclass=\"glossary-term__above-title\"\n\t\thref=\"\"\n\t\ttarget=\"_blank\"\n\t\trel=\"noopener noreferrer\"\n\t>\n\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 640 512\"><path d=\"M320 32c-8.1 0-16.1 1.4-23.7 4.1L15.8 137.4C6.3 140.9 0 149.9 0 160s6.3 19.1 15.8 22.6l57.9 20.9C57.3 229.3 48 259.8 48 291.9v28.1c0 28.4-10.8 57.7-22.3 80.8c-6.5 13-13.9 25.8-22.5 37.6C0 442.7-.9 448.3 .9 453.4s6 8.9 11.2 10.2l64 16c4.2 1.1 8.7 .3 12.4-2s6.3-6.1 7.1-10.4c8.6-42.8 4.3-81.2-2.1-108.7C90.3 344.3 86 329.8 80 316.5V291.9c0-30.2 10.2-58.7 27.9-81.5c12.9-15.5 29.6-28 49.2-35.7l157-61.7c8.2-3.2 17.5 .8 20.7 9s-.8 17.5-9 20.7l-157 61.7c-12.4 4.9-23.3 12.4-32.2 21.6l159.6 57.6c7.6 2.7 15.6 4.1 23.7 4.1s16.1-1.4 23.7-4.1L624.2 182.6c9.5-3.4 15.8-12.5 15.8-22.6s-6.3-19.1-15.8-22.6L343.7 36.1C336.1 33.4 328.1 32 320 32zM128 408c0 35.3 86 72 192 72s192-36.7 192-72L496.7 262.6 354.5 314c-11.1 4-22.8 6-34.5 6s-23.5-2-34.5-6L143.3 262.6 128 408z\"\/><\/svg>\n\t\t<span><\/span>\n\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 384 512\"><path d=\"M342.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L274.7 256 105.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z\"\/><\/svg>\n\t<\/a>\n    <h3>Cloud Hosting<\/h3>\n    <p>Traditional web hosting houses a website on a physical server. On the other hand, \u201ccloud hosting\u201d uses multiple virtual (remote) servers for the same task.<\/p>\n            <a\n            href=\"https:\/\/www.dreamhost.com\/glossary\/hosting\/cloud-hosting\/\"\n                        class=\"btn btn--white-outline btn--sm btn--round\"\n                                    target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            >\n                            Read More                    <\/a>\n\n<\/div>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1600\" height=\"592\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Restore-Your-Whole-Website.jpg.webp\" alt=\"If you\u2019ve tried other fixes and nothing seems to work, you might just need to restore your site to how it was before the client errors arrived.\" class=\"wp-image-39998 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Restore-Your-Whole-Website.jpg.webp 1600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Restore-Your-Whole-Website-300x111.jpg 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Restore-Your-Whole-Website-1024x379.jpg 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Restore-Your-Whole-Website-768x284.jpg 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Restore-Your-Whole-Website-1536x568.jpg 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Restore-Your-Whole-Website-600x222.jpg.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Restore-Your-Whole-Website-1200x444.jpg.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Restore-Your-Whole-Website-730x270.jpg.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Restore-Your-Whole-Website-1460x540.jpg.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Restore-Your-Whole-Website-784x290.jpg.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Restore-Your-Whole-Website-1568x580.jpg.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2023\/04\/Restore-Your-Whole-Website-877x324.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/592;\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Restoring replaces your current live site with the chosen backup, so any changes made after that backup date will need to be redone \u2014 worth it if it makes a stubborn 405 disappear.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-bonus-stop-405-errors-on-your-api-calls\"><b>Bonus: Stop 405 Errors on Your API Calls<\/b><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If your site relies on a connection with an external API, a 405 usually means the API server refused your request\u2019s method. Three things to check:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><b>The method itself:<\/b> Check the API\u2019s documentation for the endpoint \u2014 a PUT sent where only POST is defined earns a 405, and the response\u2019s Allow header (when the server includes one) tells you what the endpoint actually accepts.<\/li>\n\n\n\n<li><b>Your headers:<\/b> Mismatched headers surface as neighboring errors rather than 405s \u2014 a Content-Type the endpoint can\u2019t parse returns a 415, an unsatisfiable Accept returns a 406. Keeping them tidy (application\/json for JSON payloads, application\/x-www-form-urlencoded for classic form posts, plus an Accept header for the format you expect back) rules those look-alikes out quickly.<\/li>\n\n\n\n<li><b>Preflight requests:<\/b> Browser-based API calls often send an OPTIONS request first (a CORS preflight). If the server doesn\u2019t accept OPTIONS, the real request never gets sent \u2014 so make sure the endpoint answers OPTIONS too.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Your site or application logs may also reveal the underlying problem here.<\/p>\n\n\n\n<h2 id=\"h-how-to-stop-the-405-error-from-returning\" class=\"wp-block-heading\">How To Stop the 405 Error From Returning<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Working through all of the steps above is no small task. But if you\u2019re willing to put in the effort, you should be able to banish the 405 errors showing up on your website or app. To avoid going through the whole thing again:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><b>Test your site after every change<\/b> \u2013 Whenever you install new plugins or themes or touch your redirect rules, submit your forms and hit your key pages. If a change is going to cause 405 errors, it\u2019s good to know early!<\/li>\n\n\n\n<li><b>Keep redirects method-safe<\/b> \u2013 Point forms and API calls at final URLs, and reach for 307\/308 instead of 301\/302 anywhere a POST might cross a redirect.<\/li>\n\n\n\n<li><b>Help your users troubleshoot<\/b> \u2013 If a 405 does slip through, a custom error page that says what to try (reload from the address bar, return to the homepage) turns a dead end into a detour.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"h-http-405-error-frequently-asked-questions\" class=\"wp-block-heading\">HTTP 405 Error: Frequently Asked Questions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-faq-what-does-405-mean\">What does HTTP 405 Method Not Allowed mean?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">It means the server recognized your request method (GET, POST, PUT, and so on) but the URL you requested doesn\u2019t support it. The page exists \u2014 the request just needs to arrive as a method that URL accepts.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-faq-is-405-my-fault\">Is a 405 error my fault as a visitor?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Almost never. The mismatch lives in the site\u2019s links, forms, redirects, or server rules. As a visitor, you can retype the URL in the address bar (which sends a fresh GET) or navigate from the homepage. If the error persists, only the site\u2019s owner can fix it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-faq-404-403-405\">What\u2019s the difference between 404, 403, and 405 errors?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A 404 means the content doesn\u2019t exist at that URL. A 403 means the server refuses to authorize the request, whatever the method. A 405 means the content exists and the method, not your permissions, is the problem: the request used an HTTP verb that URL doesn\u2019t support.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-faq-nginx-405-not-allowed\">Why does nginx show \u201c405 Not Allowed\u201d?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u201c405 Not Allowed\u201d is nginx\u2019s wording for this error, and the classic trigger is a POST sent to a static file \u2014 nginx won\u2019t accept form submissions to plain HTML pages. Point the form\u2019s action at a real handler (a script or form endpoint) instead of a static page.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-faq-405-form-submission\">How do I fix a 405 error on a form submission?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Check the form\u2019s action URL: it should point at the exact, final address of the handler, with the right protocol (https) and hostname (www or not), so no redirect converts the POST into a GET along the way. Then confirm the handler actually accepts POST.<\/p>\n\n\n\n<h2 id=\"h-http-405-error-wrapping-up\" class=\"wp-block-heading\">HTTP 405 Error: Wrapping Up<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The 405 Method Not Allowed error looks cryptic, but it\u2019s one of the more honest status codes: the page exists, the method doesn\u2019t match, and when the server includes an Allow header, the response even tells you what the URL accepts. Check your links and forms, review your redirect and rewrite rules, and read the logs \u2014 that combination resolves the vast majority of cases.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And if you\u2019d rather not debug server mysteries alone, that\u2019s exactly what a good host\u2019s support team is for.<\/p>\n\n\n\n\n<div\n\tclass=\"article-cta-shared article-cta-small\"\n>\n    <div class=\"tr-img-wrap-outer jsLoading\"><img decoding=\"async\" class=\"js-img-lazy \" src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/themes\/blog2018\/assets\/img\/lazy-loading-transparent.webp\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/themes\/blog2018\/assets\/img\/article-small-ad-cta-placeholder.webp 1x, https:\/\/www.dreamhost.com\/blog\/wp-content\/themes\/blog2018\/assets\/img\/article-small-ad-cta-placeholder-x2.webp 2x\"  alt=\"Ad background image\" \/><\/div>\n\n\n\n\n  <div class=\"content-btm\">\n    <h2\n      class=\"h2--md\"\n    >\n      Hosting That Has Your Back\n    <\/h2>\n    <p\n      class=\"p--md\"\n    >\n      Every DreamHost web hosting plan includes daily automated backups, unmetered bandwidth, and 24\/7 support \u2014 so the next server mystery is ours to solve, not yours.\n    <\/p>\n\n            <a\n            href=\"https:\/\/www.dreamhost.com\/hosting\/\"\n                        class=\"btn btn--white-outline btn--sm btn--round\"\n                                    target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            >\n                            Explore Web Hosting Plans                    <\/a>\n\n  <\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>HTTP error codes are useful and frustrating in equal measure. An error page makes it very clear that something went wrong, but most of us haven\u2019t got the faintest clue what \u201c405 Method Not Allowed\u201d actually means, let alone how to fix it. Here\u2019s the short version: the page you asked for exists, but the [&hellip;]<\/p>\n","protected":false},"author":1062,"featured_media":40055,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_yoast_wpseo_opengraph-title":"HTTP 405 Method Not Allowed Error: What It Means And How To Fix It","_yoast_wpseo_opengraph-description":"HTTP 405 Method Not Allowed means the URL exists but doesn\u2019t accept the request method your browser sent. Learn what causes 405 errors and how to fix them.","_yoast_wpseo_twitter-title":"HTTP 405 Method Not Allowed Error: What It Means And How To Fix It","_yoast_wpseo_twitter-description":"HTTP 405 Method Not Allowed means the URL exists but doesn\u2019t accept the request method your browser sent. Learn what causes 405 errors and how to fix them.","toc_headlines":"[[\"h-what-is-the-405-method-not-allowed-error\", \"What Does HTTP 405 Method Not Allowed Mean?\"], [\"h-what-causes-the-405-error\", \"What Causes the 405 Error?\"], [\"h-how-to-diagnose-a-405-error\", \"How To Diagnose a 405 Error\"], [\"h-how-to-fix-the-405-method-not-allowed-error\", \"How To Fix the 405 Method Not Allowed Error\"], [\"h-how-to-stop-the-405-error-from-returning\", \"How To Stop the 405 Error From Returning\"], [\"h-http-405-error-frequently-asked-questions\", \"HTTP 405 Error: Frequently Asked Questions\"], [\"h-http-405-error-wrapping-up\", \"HTTP 405 Error: Wrapping Up\"]]","hide_toc":false,"show_updated_at":"1","footnotes":""},"categories":[13127,550,696],"tags":[],"class_list":["post-39983","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-errors-troubleshooting","category-tutorials","category-wordpress"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.3 (Yoast SEO v28.1) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>HTTP 405 Method Not Allowed: Meaning &amp; Fixes - DreamHost<\/title>\n<meta name=\"description\" content=\"HTTP 405 Method Not Allowed means the URL exists but doesn\u2019t accept the request method your browser sent. Learn what causes 405 errors and how to fix them.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dreamhost.com\/blog\/fixing-the-405-error\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"HTTP 405 Method Not Allowed Error: What It Means And How To Fix It\" \/>\n<meta property=\"og:description\" content=\"HTTP 405 Method Not Allowed means the URL exists but doesn\u2019t accept the request method your browser sent. Learn what causes 405 errors and how to fix them.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dreamhost.com\/blog\/fixing-the-405-error\/\" \/>\n<meta property=\"og:site_name\" content=\"DreamHost Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DreamHost\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-12T05:22:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-12T06:07:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Your-Guide-to-Fixing-the-405-Method-Not-Allowed-Error-Social-Image.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jason Cosper\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"HTTP 405 Method Not Allowed Error: What It Means And How To Fix It\" \/>\n<meta name=\"twitter:description\" content=\"HTTP 405 Method Not Allowed means the URL exists but doesn\u2019t accept the request method your browser sent. Learn what causes 405 errors and how to fix them.\" \/>\n<meta name=\"twitter:creator\" content=\"@dreamhost\" \/>\n<meta name=\"twitter:site\" content=\"@dreamhost\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jason Cosper\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutes\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"HTTP 405 Method Not Allowed: Meaning & Fixes - DreamHost","description":"HTTP 405 Method Not Allowed means the URL exists but doesn\u2019t accept the request method your browser sent. Learn what causes 405 errors and how to fix them.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dreamhost.com\/blog\/fixing-the-405-error\/","og_locale":"en_US","og_type":"article","og_title":"HTTP 405 Method Not Allowed Error: What It Means And How To Fix It","og_description":"HTTP 405 Method Not Allowed means the URL exists but doesn\u2019t accept the request method your browser sent. Learn what causes 405 errors and how to fix them.","og_url":"https:\/\/www.dreamhost.com\/blog\/fixing-the-405-error\/","og_site_name":"DreamHost Blog","article_publisher":"https:\/\/www.facebook.com\/DreamHost\/","article_published_time":"2026-07-12T05:22:46+00:00","article_modified_time":"2026-07-12T06:07:48+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/Your-Guide-to-Fixing-the-405-Method-Not-Allowed-Error-Social-Image.jpg","type":"image\/jpeg"}],"author":"Jason Cosper","twitter_card":"summary_large_image","twitter_title":"HTTP 405 Method Not Allowed Error: What It Means And How To Fix It","twitter_description":"HTTP 405 Method Not Allowed means the URL exists but doesn\u2019t accept the request method your browser sent. Learn what causes 405 errors and how to fix them.","twitter_creator":"@dreamhost","twitter_site":"@dreamhost","twitter_misc":{"Written by":"Jason Cosper","Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dreamhost.com\/blog\/fixing-the-405-error\/#article","isPartOf":{"@id":"https:\/\/www.dreamhost.com\/blog\/fixing-the-405-error\/"},"author":{"name":"Jason Cosper","@id":"https:\/\/www.dreamhost.com\/blog\/#\/schema\/person\/2273b8bf7336df78f6d99a89c17253c4"},"headline":"HTTP 405 Method Not Allowed Error: What It Means And How To Fix It","datePublished":"2026-07-12T05:22:46+00:00","dateModified":"2026-07-12T06:07:48+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dreamhost.com\/blog\/fixing-the-405-error\/"},"wordCount":3169,"publisher":{"@id":"https:\/\/www.dreamhost.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.dreamhost.com\/blog\/fixing-the-405-error\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/405-error.jpg","articleSection":["Errors &amp; Troubleshooting","Tutorials","WordPress"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.dreamhost.com\/blog\/fixing-the-405-error\/","url":"https:\/\/www.dreamhost.com\/blog\/fixing-the-405-error\/","name":"HTTP 405 Method Not Allowed: Meaning & Fixes - DreamHost","isPartOf":{"@id":"https:\/\/www.dreamhost.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dreamhost.com\/blog\/fixing-the-405-error\/#primaryimage"},"image":{"@id":"https:\/\/www.dreamhost.com\/blog\/fixing-the-405-error\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/405-error.jpg","datePublished":"2026-07-12T05:22:46+00:00","dateModified":"2026-07-12T06:07:48+00:00","description":"HTTP 405 Method Not Allowed means the URL exists but doesn\u2019t accept the request method your browser sent. Learn what causes 405 errors and how to fix them.","breadcrumb":{"@id":"https:\/\/www.dreamhost.com\/blog\/fixing-the-405-error\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dreamhost.com\/blog\/fixing-the-405-error\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dreamhost.com\/blog\/fixing-the-405-error\/#primaryimage","url":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/405-error.jpg","contentUrl":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2023\/04\/405-error.jpg","width":1460,"height":1095,"caption":"how to fix the 405 Method Not Allowed Error"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dreamhost.com\/blog\/fixing-the-405-error\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.dreamhost.com\/blog\/"},{"@type":"ListItem","position":2,"name":"HTTP 405 Method Not Allowed Error: What It Means And How To Fix It"}]},{"@type":"WebSite","@id":"https:\/\/www.dreamhost.com\/blog\/#website","url":"https:\/\/www.dreamhost.com\/blog\/","name":"DreamHost Blog","description":"","publisher":{"@id":"https:\/\/www.dreamhost.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dreamhost.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.dreamhost.com\/blog\/#organization","name":"DreamHost","url":"https:\/\/www.dreamhost.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dreamhost.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/dhblog.dream.press\/blog\/wp-content\/uploads\/2019\/01\/dh_logo-blue-2.png","contentUrl":"https:\/\/dhblog.dream.press\/blog\/wp-content\/uploads\/2019\/01\/dh_logo-blue-2.png","width":1200,"height":168,"caption":"DreamHost"},"image":{"@id":"https:\/\/www.dreamhost.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DreamHost\/","https:\/\/x.com\/dreamhost","https:\/\/www.instagram.com\/dreamhost\/","https:\/\/www.linkedin.com\/company\/dreamhost\/","https:\/\/www.youtube.com\/user\/dreamhostusa"]},{"@type":"Person","@id":"https:\/\/www.dreamhost.com\/blog\/#\/schema\/person\/2273b8bf7336df78f6d99a89c17253c4","name":"Jason Cosper","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/02\/IMG_4807-scaled.jpeg","url":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/02\/IMG_4807-scaled.jpeg","contentUrl":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/02\/IMG_4807-scaled.jpeg","caption":"Jason Cosper"},"description":"Jason is DreamHost\u2019s WordPress Product Advocate, based out of Bakersfield, CA. He is currently working on making our DreamPress product even better. In his free time, he likes to curl up on the couch and watch scary movies with his wife Sarah and three very small dogs. Follow him on Twitter.","url":"https:\/\/www.dreamhost.com\/blog\/author\/jasoncosper\/"}]}},"lang":"en","translations":{"en":39983,"es":40033,"pt":51706,"pl":51712,"de":56993,"ru":57002,"uk":57005,"it":68280,"fr":70145,"nl":70176},"pll_sync_post":{},"_links":{"self":[{"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/39983","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/users\/1062"}],"version-history":[{"count":0,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/39983\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/media\/40055"}],"wp:attachment":[{"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/media?parent=39983"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/categories?post=39983"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/tags?post=39983"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}