Puncte:0

Nginx: rescrie fișierul din director în rădăcină

drapel um

Am un server nginx care rulează pe mediul Linux și se ocupă de domenii www.example1.com și www.example2.com. fiecare domeniu are propriul său sitemap, așa că am nevoie de sitemap-ul corect încărcat pentru fiecare domeniu, așa cum se află în directorul rădăcină, de exemplu:

www.example1.com/sitemap.xml este de fapt încărcat de la www.example1.com/sitemaps/1/sitemap.xml

Și:

www.example2.com/sitemap.xml este de fapt încărcat de la www.example2.com/sitemaps/2/sitemap.xml

Pentru a realiza acest lucru, am încercat să atribui o valoare pentru fiecare domeniu și să o rescriu pe baza valorii variabilei, cum urmează:

în nginx.conf:

harta $http_host $domeniu {
    www.example1.com 1;
    www.example2.com 2;
}

Și în sitemap.conf:

if($domain=1){
  rescrie sitemap-uri/1/sitemap(.*)$ /sitemap ultimul;
}
if($domain=2){
  rescrie sitemap-uri/2/sitemap(.*)$ /sitemap ultimul;
}

Dar din anumite motive, această configurație returnează 404.

Vreun sfat?

drapel sv
`sitemap.conf` ar putea fi simplificat ca `rescrie sitemap-uri/$domain/sitemap(.*)$ /sitemap last;`. Totuși, acest lucru nu împiedică 404. 404 s-a datorat probabil altor motive (decât fragmentele partajate în OP). Vă rugăm să distribuiți configurația completă pentru a depana.
Puncte:2
drapel gr

Nu văd configurația dvs. completă și nu știu cum și unde includeți asta sitemap.conf fișier, dar aș prefera să o fac într-un mod complet diferit. Cu existenta ta Hartă blocați așa ar arăta

locație = /sitemap.xml {
    # utilizați variabila „$domain” ca parte a căii complete către fișierul „sitemap.xml”.
    root /var/www/domain/sitemaps/$domain; # nicio bară oblică aici!
}

sau chiar obține calea completă către /sitemap/N/ folderul cu Hartă directiv ca

harta $http_host $sitemap_path {
    www.example1.com /var/www/example1.com/sitemaps/1;
    www.example2.com /var/www/example1.com/sitemaps/2;
}

și

locație = /sitemap.xml {
    # utilizați variabila „$sitemap_path” ca cale completă către fișierul „sitemap.xml”.
    root $sitemap_path; # nicio bară oblică aici!
}

Dacă tot doriți să utilizați rescrie directivă pentru această sarcină, o utilizați incorect. Poți încerca asta:

dacă ($domeniu=1) {
    rescrie ultimul ^/sitemap\.xml$ /sitemaps/1/sitemap.xml;
}
dacă ($domeniu=2) {
    rescrie ultimul ^/sitemap\.xml$ /sitemaps/2/sitemap.xml;
}

sau chiar mai optimizat:

dacă ($domeniu) {
    rescrie ultimul ^/sitemap\.xml$ /sitemaps/$domain/sitemap.xml;
}
Eng7 avatar
drapel um
Configurațiile complete vor fi confuze, de aceea am adăugat doar partea aferentă configurației.
Eng7 avatar
drapel um
Schimbarea directorului rădăcină pentru locația sitemap.xml a funcționat pentru mine. Pentru partea de rescriere, pentru ce este folosit „ultimul”?
Ivan Shatsky avatar
drapel gr
Îl puteți considera ca copy-paste din configurația originală.În general, indicatorul „last” înseamnă că întreaga procesiune URI ar trebui să aibă loc din nou, dar de data aceasta pentru valoarea modificată „$uri”.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.