Sincronizare fișiere producție/stage/dev

Am de făcut ceva mentenanță la un site pe WP, iar wp-content/uploads are peste 20Gb (exagerat de multe imagini, pdf-uri, zip-uri etc). Pentru că nu are sens să țin toate aceste fișiere în trei locuri, am căutat o soluție rapidă pentru a rezolva cumva treaba asta. Plecând de la premisa că folosim Apache, am găsit două variante:

1. Redirect

În vhost se adaugă:

<VirtualHost *:80>
  Redirect permanent "/wp-content/uploads/" "http://live-url/wp-content/uploads/"

Două probleme:

  1. trebuie să editezi vhost, restart apache. Nimic grav, dar e enervant;
  • ORICE este în wp-content/uploads va fi redirectat. Asta e grav pentru că nu vei putea face teste (chiar dacă fișierele există local, vei primi 404, pentru că nu există pe server).

2. RewriteRule

În wp-content/uploads (stage și dev) faci un .htaccess:

# END WordPress
RewriteEngine On
RewriteBase /wp-content/uploads/

# dacă fișierul cu acest nume nu există
RewriteCond %{REQUEST_FILENAME} !-f

# dacă directorul cu acest nume nu există
RewriteCond %{REQUEST_FILENAME} !-d

# se face rewrite pe URL-ul de live
RewriteRule (.*) http://live-url/wp-content/uploads/$1 [L]

Cele două probleme înșirate mai sus nu mai există și nici nu am găsit alte probleme.

Cred că ar fi util dacă există vreun nginx guru pe aici, să ne spună cum s-ar face asta și pe celălalt server :slight_smile:

1 Like
location / {
    try_files $uri $uri/ /index.php?$args;
}

sau

location = /wp-content/uploads/ {
  rewrite /wp-content/uploads/ http://live-url/$uri
} 

Deasemena poti gasii documentatie pentru Wordpress in Nginx aici

Pe nginx ar fi cam așa (nu am testat, dar ar trebuie să meargă)

location /wp-content/uploads/ {
    try_files $uri $uri/ @live_server;
}

location @live_server {
     proxy_pass http://live.server;
}

@bovidiu location = /ceva/ înseamnă potrivire exactă (nu merge pentru /ceva/altceva).

2 Likes