



































































When I first installed ClassicPress on a freshly configured Caddy web server, everything seemed to go smoothly — until the first time I tried to upload an image.
The familiar red banner appeared with the error:
wordpress permissions :
Unable to create directory wp-content/uploads/2025/11.
Is its parent directory writable by the server?
At first glance, it looked like a minor permissions glitch, but it turned out to be the start of a deeper configuration issue involving how Caddy handles file ownership and how ClassicPress writes to disk. This article walks through exactly what caused the problem, how to fix it safely, and how to prevent the related FTP credential prompt that often follows. We’ll also cover how to remove index.php from your site’s URLs to complete a clean setup.

When ClassicPress (or WordPress) reports it cannot create a directory under wp-content/uploads, it’s usually because the web server process doesn’t have permission to write there. In this case, the files were owned by the user amar — the one who installed ClassicPress — while Caddy runs as its own system user caddy. Because Linux enforces strict file ownership rules, the Caddy process simply didn’t have permission to create subdirectories like /wp-content/uploads/2025/11.
If you’re coming from Apache or Nginx, this can be confusing because those servers typically run under www-data or apache, and many hosting setups preconfigure permissions automatically. With Caddy, everything starts cleaner — and stricter — so you’ll need to adjust permissions manually after installation.

Adding the caddy user to your local user’s group (in this case, amar) lets the web server and your user account share access to the project folders. Run the following commands:
sudo usermod -aG amar caddy
sudo systemctl restart caddy
Restarting Caddy ensures the new group membership takes effect immediately.

Next, give the uploads directory group write access so both amar and caddy can manage files:
sudo chmod -R 775 /var/www/classicpress/wp-content/uploads
The permission 775 allows the owner and group to read, write, and execute, while keeping everyone else read-only — a good balance of security and flexibility.
After fixing the upload issue, the next problem appeared when installing a theme — ClassicPress unexpectedly asked for FTP credentials:
Installing theme from uploaded file: mcluhanNov25.zip
Connection Information
To perform the requested action, ClassicPress needs to access your web server.
Please enter your FTP credentials to proceed.
This prompt appears because ClassicPress doesn’t realise it can write directly to your filesystem. By default, it assumes you’ll upload via FTP unless configured otherwise. Let’s fix that.
Edit your wp-config.php (or wp1-config.php) and add this line just before the line that says:
/* That’s all, stop editing! Happy publishing. */
define('FS_METHOD', 'direct');
This single directive tells ClassicPress to perform direct writes to disk through PHP, bypassing the need for FTP credentials entirely.

With permissions fixed and FTP bypassed, the next refinement was cleaning up URLs. ClassicPress sites running on Caddy sometimes display index.php in the path — for example, example.com/index.php/about instead of example.com/about.
Open your site’s Caddyfile (commonly at /etc/caddy/Caddyfile) and ensure it includes a rewrite rule that redirects all non-static requests to index.php internally:
example.com {
root * /var/www/classicpress
php_fastcgi unix//run/php/php8.2-fpm.sock
file_server
@wordpress {
path_regexp wp ^/(wp-admin|wp-login|wp-cron|wp-content|wp-includes|wp-json)
}
@notStatic {
file {
try_files {path} /index.php?{query}
}
}
rewrite @notStatic /index.php?{query}
}
Then reload Caddy to apply the changes:
sudo systemctl reload caddy
Your ClassicPress URLs will now be clean, SEO-friendly, and free of index.php.

| Step | Command / Action |
|---|---|
| Add Caddy to group | sudo usermod -aG amar caddy |
| Restart Caddy | sudo systemctl restart caddy |
| Set upload folder permissions | sudo chmod -R 775 wp-content/uploads |
| Enable direct file writes | define('FS_METHOD', 'direct'); |
| Remove index.php from URLs | Add rewrite @notStatic /index.php?{query} in Caddyfile |
Caddy is a fantastic choice for hosting ClassicPress or WordPress — lightweight, secure, and automatically HTTPS-enabled. But because it runs as its own user, file ownership issues are almost inevitable on first install. By giving Caddy group access to your project, setting sensible permissions, and defining FS_METHOD, you solve both the upload error and the FTP prompt in one go. Adding the rewrite rule completes the setup, removing index.php and ensuring your URLs are clean and professional.
1. Why does ClassicPress ask for FTP credentials?
Because it doesn’t detect writable permissions via PHP. Adding define('FS_METHOD', 'direct'); fixes that.
2. Is it safe to give Caddy write access?
Yes, as long as only the wp-content folder is writable. Keep wp-admin and wp-includes read-only.
3. Do I need to reload PHP-FPM after changing permissions?
Usually not, but it’s a good idea if you’ve adjusted user groups or ownership.
Have you faced this issue on your first Caddy install? Share your experience in the comments — your fix might save someone else’s weekend!
This post titled “Fixing ‘Unable to Create Directory’ and FTP Prompt Issues in ClassicPress on Caddy Server” was published under category “Server Administration” and last updated November 12, 2025.
What this post is all about – Excerpt
This is a paragraph
The Quick Brown Fox Jumped Over The Lazy Dog.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Elementum tempus egestas sed sed risus pretium quam vulputate. Sed sed risus pretium quam vulputate. Pharetra convallis posuere morbi leo urna molestie. Vitae sapien pellentesque habitant morbi tristique senectus et netus. Posuere ac ut consequat semper viverra nam. Purus faucibus ornare suspendisse sed nisi lacus sed viverra. Varius sit amet mattis vulputate enim. Quis varius quam quisque id diam. Orci nulla pellentesque dignissim enim sit amet venenatis urna.
Sed odio morbi quis commodo odio aenean. Feugiat pretium nibh ipsum consequat nisl vel pretium lectus. Libero volutpat sed cras ornare. Et ultrices neque ornare aenean euismod elementum nisi quis eleifend. Erat velit scelerisque in dictum. Venenatis a condimentum vitae sapien pellentesque habitant morbi tristique. Nibh venenatis cras sed felis eget velit aliquet. Ut venenatis tellus in metus. Nunc scelerisque viverra mauris in aliquam. Dui accumsan sit amet nulla facilisi. Maecenas ultricies mi eget mauris. Sollicitudin ac orci phasellus egestas tellus rutrum tellus pellentesque. Aliquam purus sit amet luctus venenatis lectus magna fringilla.
Ut tristique et egestas quis ipsum suspendisse ultrices gravida. Arcu non odio euismod lacinia at quis risus. Tortor at risus viverra adipiscing. Elit eget gravida cum sociis natoque penatibus et. Risus at ultrices mi tempus. Cursus euismod quis viverra nibh cras pulvinar mattis. Quis enim lobortis scelerisque fermentum dui. Arcu cursus vitae congue mauris rhoncus aenean vel elit. Vulputate sapien nec sagittis aliquam malesuada bibendum arcu. Dolor morbi non arcu risus quis varius quam quisque. Sit amet justo donec enim diam vulputate ut pharetra sit. Adipiscing vitae proin sagittis nisl rhoncus mattis rhoncus. Ultricies lacus sed turpis tincidunt id. Euismod nisi porta lorem mollis aliquam ut porttitor. Scelerisque viverra mauris in aliquam. Semper viverra nam libero justo laoreet sit amet. Blandit cursus risus at ultrices mi tempus imperdiet. Nam libero justo laoreet sit amet cursus sit amet dictum. In hac habitasse platea dictumst vestibulum rhoncus est pellentesque elit.
Mi in nulla posuere sollicitudin aliquam ultrices sagittis orci a. Laoreet sit amet cursus sit amet dictum sit amet justo. Diam ut venenatis tellus in metus vulputate eu scelerisque felis. Aliquam sem fringilla ut morbi tincidunt augue. Orci sagittis eu volutpat odio facilisis mauris sit amet. Quis auctor elit sed vulputate mi sit. Eleifend quam adipiscing vitae proin. Massa sed elementum tempus egestas sed sed risus pretium quam. Urna neque viverra justo nec ultrices dui sapien eget. Risus ultricies tristique nulla aliquet enim tortor at auctor. Quis auctor elit sed vulputate mi sit. Consequat interdum varius sit amet mattis vulputate enim nulla. Volutpat odio facilisis mauris sit amet massa vitae. Ultricies leo integer malesuada nunc vel risus commodo viverra. In arcu cursus euismod quis viverra nibh cras. Gravida in fermentum et sollicitudin ac orci. Risus viverra adipiscing at in tellus. Sed risus ultricies tristique nulla aliquet. Volutpat ac tincidunt vitae semper quis.

Iaculis nunc sed augue lacus viverra vitae congue eu consequat. Ut faucibus pulvinar elementum integer enim neque volutpat ac tincidunt. Quam lacus suspendisse faucibus interdum posuere lorem ipsum dolor. Amet consectetur adipiscing elit ut aliquam purus sit amet. Vivamus at augue eget arcu dictum varius duis. Pulvinar neque laoreet suspendisse interdum consectetur libero id faucibus. Faucibus turpis in eu mi bibendum. Eget dolor morbi non arcu risus quis varius quam. Sollicitudin nibh sit amet commodo nulla facilisi nullam vehicula. Lobortis scelerisque fermentum dui faucibus in ornare quam. Ornare arcu odio ut sem nulla pharetra diam sit amet.
Content Delivery Networks (CDNs) are distributed networks of servers that provide fast, reliable, and scalable delivery of Internet content. They are specifically designed to solve the problem of latency, the delay that occurs when you request to load a web page and the server has to deliver that page to your location.
As an example, when you are streaming live IPL match on Jio, the content is delivered via a CDN. Similarly, when you update your phone to new iOs or android version, or any apps for that matter, or listen to your favourite story on gaathastory podcast on Spotify.. a CDN works behind the scene to deliver the content.

Image CDNs – specialize in delivering images quickly and efficiently. They often incorporate on-the-fly image optimization, resizing, and format conversion. For startups, consumers, or small businesses, here are some examples in each type:
Cloudinary Imgix ImageEngine Fastly Akamai Image Manager
Video CDNs – These deliver video content with low latency and high quality, even to large audiences. They often include video transcoding and adaptive bitrate streaming capabilities. Examples:
Brightcove JW Player Akamai Kaltura Fastly Streaming
Script CDNs – These deliver JavaScript, CSS, and other web scripts. These can include libraries and frameworks, which developers can link to directly in their code.
jsDelivr cdnjs (Cloudflare) Microsoft Ajax Content Delivery Network Google Hosted Libraries unpkg bootstrapcdn
Mixed Media CDNs – These deliver a mix of content types including images, videos, audio, and scripts. They often include capabilities for on-the-fly optimization and conversion of various types of media.
Amazon CloudFront KeyCDN Cloudflare Fastly Akamai
Software/Code CDNs – These deliver software applications, packages, or code snippets. They’re particularly useful for serving software downloads or updates to a global audience.
GitHub (for open-source code) npm (for JavaScript packages) Microsoft Azure CDN JFrog Bintray CloudSmith
Document CDNs – These are specialized for serving documents, such as PDFs, Word documents, and Excel spreadsheets.
Scribd Google Docs (when published to the web) Slideshare Issuu Yumpu
CDNs can also be tailored for specific needs, like Gaming CDNs (optimized for delivering game content), Private CDNs (owned and operated by single businesses for their specific needs), and Edge Computing CDNs (extend their function beyond content delivery to include computation near the edge of the network).
| Image CDNs | Video CDNs | Script CDNs | Mixed Media CDNs | Software/Code CDNs | Document CDNs |
| Cloudinary | Brightcove | jsDelivr | Amazon CloudFront | GitHub | Scribd |
| Imgix | JW Player | cdnjs (Cloudflare) | KeyCDN | npm | Google Docs |
| ImageEngine | Akamai | Microsoft Ajax Content Delivery Network | Cloudflare | Microsoft Azure CDN | Slideshare |
| Fastly | Kaltura | Google Hosted Libraries | Fastly | JFrog Bintray | Issuu |
| Akamai Image Manager | Fastly Streaming | unpkg | Akamai | CloudSmith | Yumpu |
| BootstrapCDN | BunnyCDN,Gumlet | Office365 |
This question came to my mind, considering they allow embedding of their content into websites. Image/video creation Tools such as Canva, Crello , Invideo also allow embedding of content. So the answer is probably a partial “yes”. Social media sites and image/video creation SaaS, they can sometimes function similar to CDNs, especially when they provide functionality for embedding media. However, they typically have additional functionalities beyond content delivery, so they’re not solely considered CDNs.
Embed Documents as CDN
Update 2021
Since I wrote the post on Medium, world is a different place, with multiple options!
Install:
Criteria:
– The app or service should be available at least on 2 devices (e.g Windows + Mac, or iOS + Android). Apps specific to a platform (e.g. Mac + iOS) are not included. e.g. iaWriter, Apple Notes, Ulysses, Bear, Paper by WeTransfer.
– Browser based (only) are also included
– ——
| | Windows | Mac | Linux | iOs | Android |Web|Notes|
|:–|:–|:–|:–|:–|:–|:–|:–|
| Atom | X |X |X | | ||Open Source|
| Box Notes| | | | | |X|Complicated feature and pricing set: https://cloud.app.box.com/v/BoxBusinessEditions|
| Dropbox paper | | | | X | X |X|Freemium|
| Etherpad| X | X | X | | |X|Self hosted option|
| Evernote | X | X | | X | X |X||
| Focuswriter | X |X | X | | || Related to Focuswriter.co?|
| Google Keep | | | | X | X |X|Chrome Ext|
| Haroopad | X | X | X | | ||
| Joplin | | X | X | | ||Self hosted option |
| [Notable](https://notable.app#download) | X | X|X | | ||
|Notepad by Clickup||||||X|Chrome Extension|
| Notion | X | X| | X | X |X||
|OneNote | X | X | | X | X |X|Windows Phone + Apple Watch + Chrome Ext|
|Remarkable | X | |X | | ||Note: [Windows App under development](https://remarkableapp.github.io/windows.html)|
|Simplenote |X | X | X | X | X |X|from the folks at Automattic (parent company of WordPress) |
| [Slite](https://slite.com/pricing) | X | X | | X | X |X|
|[Stackedit ](https://stackedit.io/) | | | | | |X|Markdown, Chrome App Not updated since Mid 2019|
|Standard Notes| X | X | X | X | X |Free trial|
| [Turtl](https://turtlapp.com/download/)| X|X | X | X | Planned |X|Chrome/Firefox Ext|
|Typora | X | X | X | | ||
|Zettlr | X | X | X | | |||
|Zoho Notebook | X|X | | X | X |X|
—–
Mac Only
~~~~
—-
Ulysses
[Byword](https://apps.apple.com/us/app/byword/id420212497?mt=12)
Box Notes
Dropbox Paper
Evernote
Google Keep (?)
Standard Notes
Simplenote
Phone based / app based.
Others:
Typora
Macdown
Atom
Draft
Ulysses
Quiver
Mou
Online Markdown editors
#### Dillinger
#### Stackedit
#### Etherpad
#### HackMD
Linux:
Remarkable
Focuswriter
Haroopad
UberWriter
Ghostword (also Windows) https://wereturtle.github.io/
ghostwriter
Joplin (Self Hosted) https://joplinapp.org/clipper/
Roam Research
Notion
[Slite](https://slite.com/pricing)
—
Note Taking Updated
https://clickup.com/blog/note-taking-apps/
Bear
Workflowy
Squidnote
Dimer (Beta, Came, Paid)
Paper by WeTransfer
—-
HTML5 Markdown editor. This well-known online Markdown editor runs directly in your browser and offers much of the functionality that you’d find in any downloadable app. Dillinger allows you to preview and export your text as HTML, Styled HTML, Markdown, and as a PDF.
– https://www.oberlo.com/blog/markdown-editors
– https://itsfoss.com/online-markdown-editors/
– https://github.com/ether/etherpad-lite/wiki/Sites-that-run-Etherpad-Lite and https://static.etherpad.org/index.html
– https://daringfireball.net/projects/markdown/dingus
– https://www.techradar.com/best/best-note-taking-app
– https://www.lifewire.com/best-note-taking-apps-4136590
– https://collegeinfogeek.com/best-note-taking-apps/
– https://flight-manual.atom.io/hacking-atom/sections/hacking-on-atom-core/
– https://standardnotes.org/extensions
– https://itsfoss.com/note-taking-apps-linux/
I am writing our (the Mrs and I) Mahakumbha experience in this post… we completed our snaan on 5th February 2025. There may be far more detailed, and more engaging travelogues, but below is my sincere effort.