Wie erstelle ich in WordPress eine URL, die den Code 200 zurückgibt?

Wie erstelle ich in WordPress eine URL, die den Code 200 zurückgibt?

Dies ist erforderlich, da ich für eine WordPress-Instanz einen Load Balancer in GCP implementieren muss.

GCP leitet eine Anfrage nur dann an die WordPress-Instanz weiter, wenn sie den Integritätstest besteht.

Hier ist eine typische Definition eines Gesundheitscheck-Bildschirms

Bildbeschreibung hier eingeben

Es wird erwartet, dass der „Anforderungspfad“ 200 zurückgibt. Andernfalls wird das Zielsystem als ausgefallen betrachtet.

Wenn ich jedoch beispielsweise eine Seite in WordPress erstelle /index.php/newpage, wird immer 301 zurückgegeben.

Obwohl die WordPress-Site aktiv ist, besteht sie den Integritätscheck nicht.

Gibt es eine Möglichkeit, in WordPress eine Seite zu definieren, die 200 zurückgibt? Hoffentlich ist dafür kein zusätzliches Plug-In erforderlich, da ich die Wartung zusätzlicher Plug-Ins vermeiden möchte.

Der letzte Ausweg für mich ist, dem PHP-Server eine URL hinzuzufügen, die 200 zurückgibt. Der Status dieser URL spiegelt jedoch möglicherweise nicht zu 100 % den Zustand der WordPress-Site wider (die beispielsweise aufgrund eines MySQL-Problems ausfallen kann). Wenn dies tatsächlich der letzte Ausweg ist, wie lässt es sich am besten umsetzen? Ich kenne mich mit PHP-Entwicklung nicht aus.

Die Version von WordPress ist 4.6.2

Antwort1

Sie können die Startseite Ihrer WordPress-Installation für den Integritätscheck verwenden. Dies ist der zuverlässigste Indikator dafür, dass die WordPress-Site verfügbar ist.

Antwort2

Ich musste eine WordPress-Site in einem Container einrichten und einen Integritätscheck durchführen, bevor ich überhaupt Verkehr dorthin leiten konnte. Die Vorschläge für die „Startseite“ funktionieren erst, NACHDEM WordPress über den Browser installiert wurde. Davor geben sie einen 302-Statuscode an zurück /wp-admin/install.php. Ich habe in den Containerordnern herumgestöbert und mich für die Verwendung von /wp-includes/images/blank.gifals Integritätscheckpfad entschieden. Dadurch war der Integritätscheck erfolgreich und der Verkehr wurde zum Container geleitet. Von dort aus habe ich WordPress über den Browser installiert und konnte den Integritätscheckpfad wieder auf ändern /.

Antwort3

Obwohl dies ein alter Beitrag ist, wollte ich mich dazu äußern, da dieses Thema immer noch relevant ist und die akzeptierte Antwort in meinem Anwendungsfall nicht ideal ist. Ich würde anderen nicht empfehlen, dies zu tun; insbesondere nicht bei einem System mit hohem Datenverkehr.

Mein Problem mit der akzeptierten Antwort ist, dass empfohlen wird, die Homepage als Integritätsprüfung zu verwenden. Abhängig von Ihrer Site könnte dies in Ordnung sein, aber ich sehe keine Notwendigkeit, die Datenbank bei einer Integritätsprüfung abzufragen. Selbst wenn die Datenbankverbindung fehlschlägt, ist die Instanz technisch immer noch intakt. Wenn beispielsweise Ihr RDS-Cluster ausfällt, zeigt die Homepage einen Datenbankfehler an, der ein „“ ausgibt, 500sodass Sie Ihre automatische Skalierung ohne Grund auslösen würden. Die Integritätsprüfung muss nur die App überprüfen und sicherstellen, dass sie ordnungsgemäß eingerichtet ist.

Meine Homepage hat viele Abfragen und die Integritätsprüfung allein würde den RDS-Cluster mit meinem Setup mit mehreren Instanzen tatsächlich unnötig belasten. Ich könnte eine leichtere Seite angeben, aber das ist immer noch nicht ideal, da die Integritätsprüfung sicherstellen soll, dass die Instanz richtig eingerichtet ist und ich nicht möchte, dass jedem System, das ich hochfahre, eine projektspezifische Prüfung hinzugefügt wird. Obwohl es auch dafür Anwendungsfälle gibt.

Ich verwende diesen einfachen Gesundheitscheck ( _healthCheck.php):

<?php
/**
 * Check if basic WordPress structure is in place
 * This is to be used for load balancer health checks
 */

// Checks
define('WORDPRESS_CONFIG', __DIR__ . DIRECTORY_SEPARATOR . 'wp-config.php');
define('WORDPRESS_DIRECTORY', __DIR__ . DIRECTORY_SEPARATOR . 'wordpress');
define('WP_CONTENT_DIRECTORY', __DIR__ . DIRECTORY_SEPARATOR . 'wp-content');


// Health Check Flags
$_healthCheckStatus = true;
// Will stop the while loop
$_healthCheckCompleted = false;

// Just to be safe
try {
    // DoWhile loop here to simplify kicking out on a false $_healthCheckStatus
    do {
        // Check if wp-config exists
        if (!file_exists(WORDPRESS_CONFIG)) {
            $_healthCheckStatus = false;
        }

        // Make sure we have required directories
        $_healthCheckStatus = _dirIsValidAndNotEmpty(WORDPRESS_DIRECTORY);
        $_healthCheckStatus = _dirIsValidAndNotEmpty(WP_CONTENT_DIRECTORY);

        // Checks are complete, kick out the loop
        $_healthCheckCompleted = true; // Just say no to infinity and beyond
    } while (false === $_healthCheckCompleted && true === $_healthCheckStatus);
} catch (\Exception $e) {
    // Health check fails
    $_healthCheckStatus = false;
}

// If a bad healthcheck, return 404 to tell the load balancer we suck
if (false === $_healthCheckStatus) {
    header("HTTP/1.0 404 Not Found");
    ?>
    <html>
    <body><h1>Health is bad</h1></body>
    </html>
    <?php
    die();
} else {
    ?>
    <html>
    <body><h1>Health appears good</h1></body>
    </html>
    <?php
}

/**
 * Validates a directory and ensures it's not empty
 * @param string $dir
 * @return bool
 */
function _dirIsValidAndNotEmpty($dir) {
    // Make sure we have a directory
    if (is_dir($dir)) {
        // Make sure it's not empty
        $_dirIsNotEmpty = (new \FilesystemIterator($dir))->valid();
        if ($_dirIsNotEmpty) {
            return true;
        }
    }

    return false;
}

Einige Dinge sind zu beachten:

  • Ich installiere WordPress immer im wordpressVerzeichnis.
    • Dies erleichtert die Wartung eines Projekts in Git erheblich, da Sie das wordpressVerzeichnis einfach ignorieren können.
  • Da ich WordPress in einem eigenen Verzeichnis habe, verwende ich gerne mein eigenes, wp-contentum die Projektverwaltung zu vereinfachen.
  • Sie können dies problemlos an Ihre Bedürfnisse anpassen.

Dieser Integritätscheck überprüft nur das System, um sicherzustellen, dass es richtig eingerichtet ist. Es ist nicht nötig, die Datenbank abzufragen, da dies für den Integritätscheck nicht erforderlich ist. Dies ist ein Konfigurationsproblem, das behandelt werden sollte, bevor Sie Ihr System überhaupt einrichten.

Antwort4

Bearbeitet:

Ich habe /wp-admin/images/wordpress-logo.svg verwendet (in früheren Versionen hat es mit /favicon.ico funktioniert). Klingt eher nach einem Hack, aber wenn WordPress nicht funktioniert, erhalten Sie den 5xx-Fehler, andernfalls 200=bereits installiert, 200=nicht installiert.

verwandte Informationen