{"id":117,"date":"2026-07-22T05:01:00","date_gmt":"2026-07-22T05:01:00","guid":{"rendered":"https:\/\/www.miniamju.com\/index.php\/2026\/07\/20\/when-apache-serves-wordpress-php-as-plain-text\/"},"modified":"2026-07-28T10:25:56","modified_gmt":"2026-07-28T10:25:56","slug":"when-apache-serves-wordpress-php-as-plain-text","status":"publish","type":"post","link":"https:\/\/www.miniamju.com\/index.php\/when-apache-serves-wordpress-php-as-plain-text\/","title":{"rendered":"When Apache Serves WordPress PHP as Plain Text"},"content":{"rendered":"<h2>A DIY recovery guide for Ubuntu 24.04, Apache, PHP 8.3, Nginx, and WordPress<\/h2>\n<p>A WordPress site suddenly displaying source code instead of a webpage is more than a rendering problem. It means the web server is reading <code>.php<\/code> files as ordinary text instead of passing them to PHP for execution.<\/p>\n<p>If this happens to <code>index.php<\/code>, visitors see WordPress bootstrap code. If it happens to <code>wp-config.php<\/code>, visitors may be able to download:<\/p>\n<ul>\n<li>Database names, usernames, and passwords<\/li>\n<li>WordPress authentication keys and salts<\/li>\n<li>Custom API keys or service credentials<\/li>\n<li>Debugging and environment settings<\/li>\n<\/ul>\n<p>This guide covers how to identify the failure, contain it, restore PHP 8.3 on Ubuntu 24.04, rotate exposed secrets, harden the site, and verify the repair.<\/p>\n<blockquote>\n<p><strong>Important:<\/strong> If PHP source is publicly visible, treat the incident as a credential exposure. Take the site offline before investigating further.<\/p>\n<\/blockquote>\n<h2>The Typical Architecture<\/h2>\n<p>The example setup used throughout this guide is:<\/p>\n<pre><code class=\"language-text\">Internet\n   |\n   v\nNginx reverse proxy with HTTPS\n   |\n   v\nApache on Ubuntu 24.04\n   |\n   +-- PHP 8.3\n   +-- WordPress\n   +-- MariaDB bound to localhost\n<\/code><\/pre>\n<p>Nginx terminates HTTPS and forwards requests to Apache over a private network. Apache executes WordPress through PHP.<\/p>\n<h2>What Causes the Problem?<\/h2>\n<p>Apache does not execute PHP by itself. It needs a PHP handler, commonly one of:<\/p>\n<ul>\n<li><code>libapache2-mod-php8.3<\/code><\/li>\n<li>PHP-FPM through <code>proxy_fcgi<\/code><\/li>\n<\/ul>\n<p>The problem occurs when the handler is missing, disabled, or disconnected from Apache. Common triggers include:<\/p>\n<ul>\n<li>An operating-system upgrade<\/li>\n<li>A PHP version upgrade<\/li>\n<li>Removal of an old PHP package<\/li>\n<li>Switching Apache MPM modules<\/li>\n<li>An incomplete package installation<\/li>\n<li>A broken virtual-host or handler configuration<\/li>\n<\/ul>\n<p>Apache may continue serving <code>.php<\/code> files, but without interpreting them.<\/p>\n<h2>Recognising the Symptoms<\/h2>\n<p>Instead of the website, a visitor may see:<\/p>\n<pre><code class=\"language-php\">&lt;?php\ndefine( &#39;WP_USE_THEMES&#39;, true );\nrequire __DIR__ . &#39;\/wp-blog-header.php&#39;;\n<\/code><\/pre>\n<p>Other warning signs include:<\/p>\n<ul>\n<li>PHP files returned with a blank or missing <code>Content-Type<\/code><\/li>\n<li><code>wp-config.php<\/code> returning a non-zero response body<\/li>\n<li>Apache showing no loaded PHP module<\/li>\n<li>PHP working at the command line but not through Apache<\/li>\n<\/ul>\n<p>Command-line PHP and Apache PHP are separate. This command can succeed:<\/p>\n<pre><code class=\"language-bash\">php -v\n<\/code><\/pre>\n<p>while Apache still serves source code.<\/p>\n<h2>Step 1: Contain the Exposure<\/h2>\n<p>Stop Apache immediately:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl stop apache2\n<\/code><\/pre>\n<p>Alternatively, remove or disable the Nginx proxy route. Stopping Apache is usually the fastest option.<\/p>\n<p>Confirm it is stopped:<\/p>\n<pre><code class=\"language-bash\">systemctl is-active apache2\n<\/code><\/pre>\n<p>Expected:<\/p>\n<pre><code class=\"language-text\">inactive\n<\/code><\/pre>\n<p>Do not restore public service until PHP execution and configuration-file protection have both been tested.<\/p>\n<h2>Step 2: Find the Active WordPress Directory<\/h2>\n<p>Do not assume WordPress is installed in <code>\/var\/www\/html<\/code>.<\/p>\n<p>Locate <code>wp-config.php<\/code>:<\/p>\n<pre><code class=\"language-bash\">sudo find \/var\/www -type f -name &#39;wp-config.php&#39; -print\n<\/code><\/pre>\n<p>Inspect Apache&#39;s active virtual hosts:<\/p>\n<pre><code class=\"language-bash\">sudo apache2ctl -S\nsudo grep -R &quot;DocumentRoot&quot; \/etc\/apache2\/sites-enabled\n<\/code><\/pre>\n<p>Record the active WordPress document root for use in later commands:<\/p>\n<pre><code class=\"language-text\">\/var\/www\/wordpress\n<\/code><\/pre>\n<p>Replace that example path if your installation differs.<\/p>\n<h2>Step 3: Confirm Whether <code>wp-config.php<\/code> Was Downloaded<\/h2>\n<p>Search Apache logs:<\/p>\n<pre><code class=\"language-bash\">sudo grep -R &quot;wp-config.php&quot; \/var\/log\/apache2\/access.log*\n<\/code><\/pre>\n<p>If Nginx is the public reverse proxy, search its logs as well:<\/p>\n<pre><code class=\"language-bash\">sudo grep -H &quot;wp-config.php&quot; \/var\/log\/nginx\/access.log*\n<\/code><\/pre>\n<p>Useful distinctions:<\/p>\n<ul>\n<li><code>HEAD ... 200 0<\/code> may mean PHP executed normally and returned no body.<\/li>\n<li><code>GET ... 403<\/code> means access was blocked.<\/li>\n<li><code>GET ... 200<\/code> with a non-zero byte count is suspicious.<\/li>\n<\/ul>\n<p>Compare the response size with the actual file:<\/p>\n<pre><code class=\"language-bash\">sudo stat -c &#39;%s %n&#39; \/var\/www\/wordpress\/wp-config.php\n<\/code><\/pre>\n<p>If the logged response size exactly matches the file size, the complete configuration file was almost certainly downloaded.<\/p>\n<p>Requests for variants such as these are typical automated scanning:<\/p>\n<pre><code class=\"language-text\">wp-config.php.old\nwp-config.php.bak\nwp-config.php.save\nwp-config.php~\n.wp-config.php.swp\n<\/code><\/pre>\n<p>Do not trust user-agent strings that claim to be Googlebot, ChatGPT, Safari, or Chrome. Automated scanners routinely spoof them.<\/p>\n<h2>Step 4: Restore PHP 8.3<\/h2>\n<p>Ubuntu 24.04 provides PHP 8.3 through its supported repositories.<\/p>\n<p>Update package metadata:<\/p>\n<pre><code class=\"language-bash\">sudo apt update\n<\/code><\/pre>\n<p>Install PHP and common WordPress extensions:<\/p>\n<pre><code class=\"language-bash\">sudo apt install \\\n  php8.3 libapache2-mod-php8.3 php8.3-cli php8.3-common \\\n  php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring \\\n  php8.3-xml php8.3-zip php8.3-intl php8.3-opcache\n<\/code><\/pre>\n<p>Disable obsolete PHP modules if they remain:<\/p>\n<pre><code class=\"language-bash\">sudo a2dismod php8.0 2&gt;\/dev\/null || true\nsudo a2dismod php8.1 2&gt;\/dev\/null || true\nsudo a2dismod php8.2 2&gt;\/dev\/null || true\n<\/code><\/pre>\n<p><code>mod_php<\/code> requires Apache&#39;s prefork MPM:<\/p>\n<pre><code class=\"language-bash\">sudo a2dismod mpm_event 2&gt;\/dev\/null || true\nsudo a2enmod mpm_prefork\nsudo a2enmod php8.3\nsudo a2enmod rewrite\n<\/code><\/pre>\n<p>Validate the configuration:<\/p>\n<pre><code class=\"language-bash\">sudo apache2ctl configtest\n<\/code><\/pre>\n<p>Expected:<\/p>\n<pre><code class=\"language-text\">Syntax OK\n<\/code><\/pre>\n<p>Confirm the modules:<\/p>\n<pre><code class=\"language-bash\">apache2ctl -M | grep -E &#39;php|mpm&#39;\n<\/code><\/pre>\n<p>Expected:<\/p>\n<pre><code class=\"language-text\">mpm_prefork_module (shared)\nphp_module (shared)\n<\/code><\/pre>\n<p>Confirm the PHP version:<\/p>\n<pre><code class=\"language-bash\">php -v\n<\/code><\/pre>\n<p>The output should report PHP 8.3.<\/p>\n<h2>Step 5: Rotate the Database Password<\/h2>\n<p>If <code>wp-config.php<\/code> was exposed, its database password must be replaced even when MariaDB listens only on localhost.<\/p>\n<p>Check the listener:<\/p>\n<pre><code class=\"language-bash\">sudo ss -lntp | grep &#39;:3306&#39;\n<\/code><\/pre>\n<p>A safer result resembles:<\/p>\n<pre><code class=\"language-text\">127.0.0.1:3306\n<\/code><\/pre>\n<p>Avoid putting the new password directly in shell history.<\/p>\n<p>Generate a password:<\/p>\n<pre><code class=\"language-bash\">openssl rand -base64 36\n<\/code><\/pre>\n<p>Store it privately, then open MariaDB without recording SQL history:<\/p>\n<pre><code class=\"language-bash\">sudo env MYSQL_HISTFILE=\/dev\/null mariadb\n<\/code><\/pre>\n<p>Change the WordPress database user&#39;s password:<\/p>\n<pre><code class=\"language-sql\">ALTER USER &#39;wordpress_user&#39;@&#39;localhost&#39;\n  IDENTIFIED BY &#39;your-generated-password&#39;;\nFLUSH PRIVILEGES;\nEXIT;\n<\/code><\/pre>\n<p>Edit <code>wp-config.php<\/code>:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/var\/www\/wordpress\/wp-config.php\n<\/code><\/pre>\n<p>Replace the <code>DB_PASSWORD<\/code> value with the identical password.<\/p>\n<p>Test the account:<\/p>\n<pre><code class=\"language-bash\">mariadb -u wordpress_user -p -h localhost wordpress_database \\\n  -e &#39;SELECT 1;&#39;\n<\/code><\/pre>\n<p>Expected:<\/p>\n<pre><code class=\"language-text\">+---+\n| 1 |\n+---+\n| 1 |\n+---+\n<\/code><\/pre>\n<h2>Step 6: Replace WordPress Keys and Salts<\/h2>\n<p>Exposed salts should be replaced to invalidate existing authentication cookies.<\/p>\n<p>Download fresh values:<\/p>\n<pre><code class=\"language-bash\">sudo curl -fsS https:\/\/api.wordpress.org\/secret-key\/1.1\/salt\/ \\\n  -o \/root\/new-wordpress-salts.txt\n\nsudo chmod 600 \/root\/new-wordpress-salts.txt\n<\/code><\/pre>\n<p>Review the new values:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/root\/new-wordpress-salts.txt\n<\/code><\/pre>\n<p>Edit <code>wp-config.php<\/code> and replace all eight definitions:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/var\/www\/wordpress\/wp-config.php\n<\/code><\/pre>\n<p>The definitions are:<\/p>\n<pre><code class=\"language-text\">AUTH_KEY\nSECURE_AUTH_KEY\nLOGGED_IN_KEY\nNONCE_KEY\nAUTH_SALT\nSECURE_AUTH_SALT\nLOGGED_IN_SALT\nNONCE_SALT\n<\/code><\/pre>\n<p>Delete the temporary file securely:<\/p>\n<pre><code class=\"language-bash\">sudo shred -u \/root\/new-wordpress-salts.txt\n<\/code><\/pre>\n<p>Check PHP syntax:<\/p>\n<pre><code class=\"language-bash\">php -l \/var\/www\/wordpress\/wp-config.php\n<\/code><\/pre>\n<p>Expected:<\/p>\n<pre><code class=\"language-text\">No syntax errors detected\n<\/code><\/pre>\n<h2>Step 7: Protect <code>wp-config.php<\/code> Independently of PHP<\/h2>\n<p>The protection must still work if PHP breaks again.<\/p>\n<p>Create an Apache security configuration:<\/p>\n<pre><code class=\"language-bash\">sudo tee \/etc\/apache2\/conf-available\/wordpress-security.conf &gt;\/dev\/null &lt;&lt;&#39;EOF&#39;\n&lt;FilesMatch &quot;^wp-config\\.php(?:\\..*)?$&quot;&gt;\n    Require all denied\n&lt;\/FilesMatch&gt;\nEOF\n<\/code><\/pre>\n<p>Enable and validate it:<\/p>\n<pre><code class=\"language-bash\">sudo a2enconf wordpress-security\nsudo apache2ctl configtest\n<\/code><\/pre>\n<p>Add an equivalent rule to the public Nginx HTTPS server block:<\/p>\n<pre><code class=\"language-nginx\">location ~* ^\/wp-config\\.php(?:\\..*)?$ {\n    deny all;\n}\n<\/code><\/pre>\n<p>Validate and reload Nginx:<\/p>\n<pre><code class=\"language-bash\">sudo nginx -t\nsudo systemctl reload nginx\n<\/code><\/pre>\n<p>Blocking both layers provides defence in depth.<\/p>\n<h2>Step 8: Correct File Permissions<\/h2>\n<p><code>wp-config.php<\/code> should not be writable by the web-server account or other users.<\/p>\n<p>Set its ownership and permissions:<\/p>\n<pre><code class=\"language-bash\">sudo chown root:www-data \/var\/www\/wordpress\/wp-config.php\nsudo chmod 640 \/var\/www\/wordpress\/wp-config.php\n<\/code><\/pre>\n<p>Verify:<\/p>\n<pre><code class=\"language-bash\">sudo stat -c &#39;%U:%G %a %n&#39; \/var\/www\/wordpress\/wp-config.php\n<\/code><\/pre>\n<p>Expected:<\/p>\n<pre><code class=\"language-text\">root:www-data 640 \/var\/www\/wordpress\/wp-config.php\n<\/code><\/pre>\n<h2>Step 9: Handle HTTPS Behind Nginx<\/h2>\n<p>The Nginx proxy should forward the original request details:<\/p>\n<pre><code class=\"language-nginx\">proxy_set_header Host $http_host;\nproxy_set_header X-Real-IP $remote_addr;\nproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\nproxy_set_header X-Forwarded-Proto $scheme;\n<\/code><\/pre>\n<p>WordPress must recognise HTTPS from the proxy. Add this to <code>wp-config.php<\/code> if it is not already present:<\/p>\n<pre><code class=\"language-php\">if (\n    ! empty($_SERVER[&#39;HTTP_X_FORWARDED_PROTO&#39;]) &amp;&amp;\n    $_SERVER[&#39;HTTP_X_FORWARDED_PROTO&#39;] === &#39;https&#39;\n) {\n    $_SERVER[&#39;HTTPS&#39;] = &#39;on&#39;;\n}\n\ndefine(&#39;FORCE_SSL_ADMIN&#39;, true);\ndefine(&#39;WP_HOME&#39;, &#39;https:\/\/www.example.com&#39;);\ndefine(&#39;WP_SITEURL&#39;, &#39;https:\/\/www.example.com&#39;);\n<\/code><\/pre>\n<p>Replace <code>www.example.com<\/code> with the real hostname.<\/p>\n<p>Validate again:<\/p>\n<pre><code class=\"language-bash\">php -l \/var\/www\/wordpress\/wp-config.php\n<\/code><\/pre>\n<h2>Step 10: Start Apache and Test Locally<\/h2>\n<p>Start Apache:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl start apache2\nsudo systemctl is-active apache2\n<\/code><\/pre>\n<p>Test the configuration-file block:<\/p>\n<pre><code class=\"language-bash\">curl -sS -o \/dev\/null -w &#39;%{http_code}\\n&#39; \\\n  -H &#39;Host: www.example.com&#39; \\\n  http:\/\/127.0.0.1\/wp-config.php\n<\/code><\/pre>\n<p>Expected:<\/p>\n<pre><code class=\"language-text\">403\n<\/code><\/pre>\n<p>Test WordPress while simulating the proxy:<\/p>\n<pre><code class=\"language-bash\">curl -sS -D - -o \/dev\/null \\\n  -H &#39;Host: www.example.com&#39; \\\n  -H &#39;X-Forwarded-Proto: https&#39; \\\n  http:\/\/127.0.0.1\/\n<\/code><\/pre>\n<p>Expected:<\/p>\n<pre><code class=\"language-text\">HTTP\/1.1 200 OK\n<\/code><\/pre>\n<p>A redirect is acceptable only when it points to the correct HTTPS hostname.<\/p>\n<h2>Step 11: Test from Outside the Origin Server<\/h2>\n<p>Test the public site:<\/p>\n<pre><code class=\"language-bash\">curl -I https:\/\/www.example.com\/\n<\/code><\/pre>\n<p>Expected:<\/p>\n<pre><code class=\"language-text\">HTTP\/1.1 200 OK\n<\/code><\/pre>\n<p>Test protected files:<\/p>\n<pre><code class=\"language-bash\">curl -sS -o \/dev\/null -w &#39;%{http_code}\\n&#39; \\\n  https:\/\/www.example.com\/wp-config.php\n\ncurl -sS -o \/dev\/null -w &#39;%{http_code}\\n&#39; \\\n  https:\/\/www.example.com\/wp-config.php.old\n<\/code><\/pre>\n<p>Expected:<\/p>\n<pre><code class=\"language-text\">403\n403\n<\/code><\/pre>\n<p>Verify that PHP source is not present:<\/p>\n<pre><code class=\"language-bash\">curl -sS https:\/\/www.example.com\/ | head\n<\/code><\/pre>\n<p>The response should contain rendered HTML, not <code>&lt;?php<\/code>.<\/p>\n<h2>Step 12: Check for Follow-On Changes<\/h2>\n<p>Search for PHP files modified after the exposure:<\/p>\n<pre><code class=\"language-bash\">sudo find \/var\/www\/wordpress -type f -name &#39;*.php&#39; \\\n  -newermt &#39;YYYY-MM-DD HH:MM:SS UTC&#39; \\\n  -printf &#39;%TY-%Tm-%Td %TH:%TM:%TS %u:%g %m %p\\n&#39;\n<\/code><\/pre>\n<p>Investigate:<\/p>\n<ul>\n<li>Unexpected PHP files under <code>wp-content\/uploads<\/code><\/li>\n<li>Random filenames<\/li>\n<li>Recently modified WordPress core files<\/li>\n<li>Unknown plugins or themes<\/li>\n<li>Unexpected administrator accounts<\/li>\n<\/ul>\n<p>Reset administrator passwords and review all active WordPress sessions.<\/p>\n<h2>Verification Checklist<\/h2>\n<ul>\n<li><input disabled=\"\" type=\"checkbox\"> Apache was taken offline during remediation.<\/li>\n<li><input disabled=\"\" type=\"checkbox\"> PHP 8.3 is installed.<\/li>\n<li><input disabled=\"\" type=\"checkbox\"> Apache loads <code>php_module<\/code>.<\/li>\n<li><input disabled=\"\" type=\"checkbox\"> Apache uses <code>mpm_prefork<\/code>.<\/li>\n<li><input disabled=\"\" type=\"checkbox\"> <code>apache2ctl configtest<\/code> reports <code>Syntax OK<\/code>.<\/li>\n<li><input disabled=\"\" type=\"checkbox\"> The database password was rotated.<\/li>\n<li><input disabled=\"\" type=\"checkbox\"> WordPress keys and salts were replaced.<\/li>\n<li><input disabled=\"\" type=\"checkbox\"> <code>wp-config.php<\/code> is <code>root:www-data<\/code> with mode <code>640<\/code>.<\/li>\n<li><input disabled=\"\" type=\"checkbox\"> Apache blocks <code>wp-config.php<\/code>.<\/li>\n<li><input disabled=\"\" type=\"checkbox\"> Nginx blocks <code>wp-config.php<\/code> and common backup suffixes.<\/li>\n<li><input disabled=\"\" type=\"checkbox\"> MariaDB listens only on the intended interfaces.<\/li>\n<li><input disabled=\"\" type=\"checkbox\"> The homepage returns rendered HTML.<\/li>\n<li><input disabled=\"\" type=\"checkbox\"> Public and local <code>wp-config.php<\/code> requests return <code>403<\/code>.<\/li>\n<li><input disabled=\"\" type=\"checkbox\"> WordPress generates HTTPS URLs.<\/li>\n<li><input disabled=\"\" type=\"checkbox\"> Recent PHP file changes have been reviewed.<\/li>\n<li><input disabled=\"\" type=\"checkbox\"> Administrator accounts and passwords have been reviewed.<\/li>\n<\/ul>\n<h2>Lessons Learned<\/h2>\n<p>The key lesson is that PHP execution is part of the security boundary. A site can look merely broken while silently exposing its most sensitive configuration.<\/p>\n<p>The most effective controls are layered:<\/p>\n<ol>\n<li>Keep the operating system and PHP supported.<\/li>\n<li>Verify Apache&#39;s PHP handler after upgrades.<\/li>\n<li>Block secret files at Apache and Nginx.<\/li>\n<li>Keep database services off public interfaces.<\/li>\n<li>Use restrictive file permissions.<\/li>\n<li>Log public requests at the reverse proxy.<\/li>\n<li>Test sensitive URLs after every platform upgrade.<\/li>\n<\/ol>\n<h2>References<\/h2>\n<ul>\n<li>Ubuntu Server: Install and configure PHP<br \/><a href=\"https:\/\/ubuntu.com\/server\/docs\/how-to\/web-services\/install-php\/\">https:\/\/ubuntu.com\/server\/docs\/how-to\/web-services\/install-php\/<\/a><\/li>\n<li>Ubuntu packages: <code>libapache2-mod-php8.3<\/code><br \/><a href=\"https:\/\/packages.ubuntu.com\/noble\/libapache2-mod-php8.3\">https:\/\/packages.ubuntu.com\/noble\/libapache2-mod-php8.3<\/a><\/li>\n<li>WordPress hardening guidance<br \/><a href=\"https:\/\/developer.wordpress.org\/advanced-administration\/security\/hardening\/\">https:\/\/developer.wordpress.org\/advanced-administration\/security\/hardening\/<\/a><\/li>\n<li>WordPress <code>wp-config.php<\/code> guidance<br \/><a href=\"https:\/\/developer.wordpress.org\/advanced-administration\/wordpress\/wp-config\/\">https:\/\/developer.wordpress.org\/advanced-administration\/wordpress\/wp-config\/<\/a><\/li>\n<li>WordPress salt rotation with WP-CLI<br \/><a href=\"https:\/\/developer.wordpress.org\/cli\/commands\/config\/shuffle-salts\/\">https:\/\/developer.wordpress.org\/cli\/commands\/config\/shuffle-salts\/<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>A practical incident-response guide for detecting, containing, repairing, and testing PHP source exposure on Ubuntu 24.04 with Apache and PHP 8.3.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"saved_in_kubio":false,"footnotes":""},"categories":[10,14],"tags":[],"class_list":["post-117","post","type-post","status-publish","format-standard","hentry","category-server-builds","category-wordpress-web"],"_links":{"self":[{"href":"https:\/\/www.miniamju.com\/index.php\/wp-json\/wp\/v2\/posts\/117","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.miniamju.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.miniamju.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.miniamju.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.miniamju.com\/index.php\/wp-json\/wp\/v2\/comments?post=117"}],"version-history":[{"count":1,"href":"https:\/\/www.miniamju.com\/index.php\/wp-json\/wp\/v2\/posts\/117\/revisions"}],"predecessor-version":[{"id":123,"href":"https:\/\/www.miniamju.com\/index.php\/wp-json\/wp\/v2\/posts\/117\/revisions\/123"}],"wp:attachment":[{"href":"https:\/\/www.miniamju.com\/index.php\/wp-json\/wp\/v2\/media?parent=117"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.miniamju.com\/index.php\/wp-json\/wp\/v2\/categories?post=117"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.miniamju.com\/index.php\/wp-json\/wp\/v2\/tags?post=117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}