2016-08-08 90 views
0

Ich habe URL www.foo.com, die zwei Sprachen hat EN und CN. Ich habe Seiten wie about.php, product.php usw.Rewrite URL für Nginx mit Sprachoption

ich die URL www.foo.com/about.php?lang=cn geschrieben werden als www.foo.com/cn/about und gleiche Weise, www.foo.com/en/product usw. will

ich nginx bin mit dieser PHP-Website zu dienen.

Ich kann den Php-Datei als

location/{ 
    try_files $uri $uri/ $uri.php?$query_string; 
} 

Ich habe versucht, so etwas wie dieses

location/{ 
    try_files $uri $uri/$query_string/ $uri.php?$query_string; 
} 

schreiben verstecken Aber irgendwie scheint nicht zu funktionieren.

+0

Haben Sie versucht, etwas, was wie 'Standort/{ if ($ arg_lang) { Rewrite ^/$ arg_lang/$ uri permanent; } } '? – slowjack2k

+0

Ich habe es nicht versucht. Kannst du es ausarbeiten? Ich meine, wie kann ich lang = "cn" Wert in $ arg_lang usw. zuweisen. – Kasino

+0

Soweit ich weiß, bietet nginx eine $ arg_ Variable für jeden Teil Ihrer Abfrage-String. Daher sollte $ arg_lang sofort verfügbar sein. Wenn also lang in der Abfragezeichenfolge gesetzt ist, sollte das Neuschreiben stattfinden. Aber in dem Moment kann ich es nicht testen. – slowjack2k

Antwort

0

Fügen Sie die .htaccess-Datei in Ihrem Ordner hinzu.

.htaccess-Datei:

RewriteEngine On # Turn on the rewriting engine 

RewriteRule ^([A-Za-z0-9-]+)/about/?$ about.php?lang=$1 [NC,L] 
RewriteRule ^([A-Za-z0-9-]+)/product/?$ product.php?lang=$1 [NC,L] 
+0

nginx unterstützt keine .htaccess – slowjack2k

0

würde ich folgendes vorschlagen. Mit diesem Beispiel "verlieren" Sie alle anderen Abfrageargumente.

location/{ 
     # for every query string parameter nginx provides a variable 
     # $arg_<name> 
     if ($arg_lang != ''){ 
      set $old_lang $arg_lang; 
      set $args lang=''; 
      set $arg_lang ''; 
      # questionmark after $uri drops all query params 
      rewrite^/$old_lang$uri? redirect; # or permanent 
     } 
    } 
+0

Hat nicht funktioniert. Aber, danke, dass ich über die $ arg_ Variable erfahren habe – Kasino