WordPress, nginx, htaccess, Plesk…

Ich teste derzeit das eine oder andere Hosting-System, so natürlich auch Plesk.

Bisher gefällt mit das System sehr gut und die Preise sind auch in Ordnung.

Angenehm finde ich die Möglichkeiten, für einzelne vServer unterschiedliche PHP Versionen zu nutzen und auch ein nginx als Proxy vorzuschalten.

Allerdings gibt es genau hier ein Problem in Verbindung mit WordPress:
Nutzt man Permelinks, funktionieren diese nicht. Die .htaccess Datei, welche der Apache nutzen würde, wird von dem nginx nicht ausgewertet wenn dieser als PHP Interpreter genutzt wird.

Ein Workaround für WordPress ist es, für alle vServer die Direktiven zu ändern, was für mich einfach keine Option ist, da es hier nur um einen Bruchteil aller Sites, auf dem WordPress überhaupt genutzt wird, geht. Alternativ gibt es dort noch ein nginx-Config-Snippet, was bei mir aber auch nicht sauber funktioniert hat. Es waren beispielsweise alle CSS Files nicht mehr erreichbar und das Design total im Eimer.

Die Lösung ist eine Anpassung den Snippets:

if (!-e $request_filename)
{
rewrite ^/(.+)/$ /index.php last;
}

Einzutragen unter Plesk > Domains > domain.tld > Einstellungen für Apache & nginx > Zusätzliche nginx-Anweisungen.
Damit funktioniert es bei mir mit drei WordPress Installationen sauber, ohne alle anderen vServer zu beeinflussen.

Nachtrag:
Nachteil hierbei, der mir aufgefallen ist: Ein Zugriff auf die von Plesk erstellten AWstats/Webalizer Statistiken ist für diese Domain/Subdomain nicht mehr möglich, da auch diese URL umgeschrieben wird.

Netscaler Gateway: Customizing

Will man nur ein paar Kleinigkeiten am Design der Gateway Logon Page ändern, wie z.B. die Beschriftung der Password-Felder, geht das sehr gut indem man rewrite-Regeln einbaut. Damit erspart man sich die ganze Page als Custom Design implementieren zu müssen und es ist über Reboots und Upgrades persistent.

Ein Beispiel, getestet mit Netscaler 10.1:
add rewrite action AD_replace_rewrite_action replace_all "http.RES.BODY(120000).SET_TEXT_MODE(ignorecase)" "\"AD Password\'\"" -pattern "\"Password\"" -bypassSafetyCheck YES -refineSearch q/extend(50,50).REGEX_SELECT(re![ ]*\'[ ]*\+[ ]*_\(\"Password\"\)[ ]*!)/

add rewrite action OTP_replace_rewrite_action replace_all "http.RES.BODY(120000).SET_TEXT_MODE(ignorecase)" "\"Token Code:\'\"" -pattern "\"Password2\"" -bypassSafetyCheck YES -refineSearch q/extend(50,50).REGEX_SELECT(re![ ]*\'[ ]*\+[ ]*_\(\"Password2\"\)[ ]*!)/

add rewrite action AD_delete_rewrite_action delete_all "http.RES.BODY(120000).SET_TEXT_MODE(ignorecase)" -pattern "document.write(\' 1\');" -bypassSafetyCheck YES

add rewrite policy AD_rewrite_pol "http.req.url.path.endswith(\"vpn/login.js\")" AD_replace_rewrite_action

add rewrite policy OTP_rewrite_pol "http.req.url.path.endswith(\"vpn/login.js\")" OTP_replace_rewrite_action

add rewrite policy AD_delete_pol "http.req.url.path.endswith(\"vpn/login.js\")" AD_delete_rewrite_action

bind rewrite global AD_rewrite_pol 80 NEXT -type RES_OVERRIDE
bind rewrite global OTP_rewrite_pol 90 NEXT -type RES_OVERRIDE
bind rewrite global AD_delete_pol 100 NEXT -type RES_OVERRIDE

Statt einem globalen Binding kann man natürlich auch pro vServer unterschiedliche Anpassungen vornehmen.

Wenn die Anpassungen nicht sofort sichtbar werden ruhig mal prüfen ob der Netscaler Caching aktiviert hat, dies hat mich einige Minuten Fehlersuche gekostet… 😉