J'essaie de convertir les réécritures Apache suivantes en Nginx:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{QUERY_STRING} =""
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_COOKIE} !(comment_author|wp\-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle) [NC]
RewriteCond "%{DOCUMENT_ROOT}/wp-content/cache/page_enhanced/%{HTTP_Host}/%{REQUEST_URI}/_index.html" -f
RewriteRule .* "/wp-content/cache/page_enhanced/%{HTTP_Host}/%{REQUEST_URI}/_index.html" [L]
</IfModule>
Ce que j'ai fait c'est:
# Set a variable to work around the lack of nested conditionals
set $cache_uri $request_uri;
# POST requests and urls with a query string should always go to PHP
if ($request_method = POST) {
set $cache_uri 'no cache';
}
if ($query_string != "") {
set $cache_uri 'no cache';
}
# Don't cache uris containing the following segments
if ($request_uri ~* "(\/wp-admin\/|\/xmlrpc.php|\/wp-(app|cron|login|register|mail)\.php|wp-.*\.php|index\.php|wp\-comments\-popup\.php|wp\-links\-opml\.php|wp\-locations\.php)") {
set $cache_uri "no cache";
}
# Don't use the cache for logged in users or recent commenters
if if ($http_cookie ~* "comment_author|wp\-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle") {
set $cache_uri 'no cache';
}
# If the cache file does not exist, pass it of to Apache for processing
location / {
try_files /wp-content/cache/page_enhanced/example.com/$cache_uri/_index.html @backend;
}
# Pass off php requests to Apache
location ~* \.php$ {
include /usr/local/etc/nginx/proxypass.conf;
proxy_pass http://127.0.0.1:80;
}
# Pass off php requests to Apache
location @backend {
include /usr/local/etc/nginx/proxypass.conf;
proxy_pass http://127.0.0.1:80;
}
Ce que je me demande, c'est que je manque quelque chose? ou fait quelque chose de mal?
En fonction de votre commentaire, voici la solution pour une pile Nginx-Apache avec une méthode de cache de page "disque: amélioré" dans le plug-in W3 Total Cache ...
location / {
error_page 418 = @cachemiss;
recursive_error_pages on;
if ($request_method = POST) { return 418; }
if ($query_string != "") { return 418; }
if ($request_uri ~* "(\/wp-admin\/|\/xmlrpc.php|\/wp-(app|cron|login|register|mail)\.php|wp-.*\.php|index\.php|wp\-comments\-popup\.php|wp\-links\-opml\.php|wp\-locations\.php)") { return 418; }
if ($http_cookie ~* "comment_author|wp\-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle") { return 418; }
try_files "/wp-content/cache/page_enhanced/$Host/$uri/_index.html" =418;
# optional code
# expires 30m;
# add_header "X-W3TC-Cache" "HIT :)";
}
location @cachemiss {
# pass the requests to backend (Apache)
# optional header
# add_header "X-W3TC-Cache" "Miss :(";
}
# other directives
# for example
location ~* \.php$ {
# pass PHP requests to Apache
}
# another example
location /wp-admin {
# pass requests to Apache
}
La solution ci-dessus suit la meilleure pratique d'utilisation d'une instruction if dans Nginx et fonctionne correctement, une fois modifiée, pour WPSC. J'espère que ça aide.