2016-10-13 3 views
1

Ich bin nicht in der Lage, Ort mit unten genannten Muster übereinstimmen, möchte ich abläuft Header auf 24 Stunden setzen. aber es funktioniert nicht. Es funktioniert, wenn ich nur unten genannten regex verwenden:Nginx Ort Übereinstimmung Regex funktioniert nicht

location ~* .*abc\.php.* { 
expires 24h; 
} 

Below Beispiel funktioniert nicht.

location ~* .*abc\.php.*xyz=detail.*login_something=.* { 
expires 24h; 
} 

Es gibt viel Inhalt zwischen und nach der "Aufruf abc.php" & "xyz = detail" & "login_something =" so muss ich verwenden. * Nur.

Vielen Dank im Voraus!

+0

Alles, was von dem '' weiter ist der Query-String und wird nicht berücksichtigt, wenn die URI zu einem 'location' passen. [Lies dies für mehr] (http://nginx.org/en/docs/http/request_processing.html#simple_php_site_configuration). –

+0

@ WiktorStribiżew: Das funktioniert nicht. – KeyurM

+0

@KeyurM: Klar, lesen Sie Richards Kommentar warum. –

Antwort

1

Es gibt mehrere Möglichkeiten, um das zu erreichen, was Sie erreichen möchten. Die einfachste Methode besteht jedoch darin, Ihren Mega Regex auf eine Variable anzuwenden, die den gesamten URI (einschließlich der Abfragezeichenfolge) enthält. Dies würde $request_uri

Das zweite Problem ist, wie sein expires zu manipulieren und wieder, anstatt mehrere Blöcke zu verwenden und in jedem PHP-Richtlinien neu implementieren müssen, verwenden Sie einfach die map Richtlinie as detailed in the expires documentation.

Zum Beispiel:

map $request_uri $expires { 
    default         off; 
    ~*abc\.php.*xyz=detail.*login_something= 24h; 
} 

server { 
    ... 
    expires $expires; 
    ... 
} 
+0

Es funktionierte wie erwartet. Vielen Dank! – KeyurM