2016-08-08 4 views
0

У меня есть URL www.foo.com, который имеет два языка EN и CN. У меня есть страницы, такие как about.php, product.php и т.д.Перепишите URL-адрес для nginx с опцией языка

Я хочу, чтобы URL www.foo.com/about.php?lang=cn быть написана как www.foo.com/cn/about и таким же образом, www.foo.com/en/product и т.д.

Я использую Nginx для обслуживания этого сайта PHP.

Я могу скрыть .php файл как

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

Я пытался писать что-то вроде этого

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

Но как-то не похоже на работу.

+0

ли вы попробовать некоторые вещи, как 'местоположение/{ если ($ arg_lang) { переписывание ^/$ arg_lang/$ URI постоянной; } } '? – slowjack2k

+0

Я не пробовал. Можете ли вы уточнить? Я имею в виду, как я могу присвоить значение lang = "cn" в $ arg_lang и т. Д. – Kasino

+0

Насколько я знаю, nginx предоставляет переменную $ arg_ для каждой части вашей строки запроса. Поэтому $ arg_lang должен быть доступен из коробки. Поэтому, когда lang задается в строке запроса, переписывание должно выполняться. Но в данный момент я не могу это проверить. – slowjack2k

ответ

0

Добавить файл .htaccess в вашу папку.

файл .htaccess:

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 не поддерживает .htaccess – slowjack2k

0

Я хотел бы предложить следующее. В этом примере вы «потеряете» все другие аргументы запроса.

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

Не работает. Но, спасибо, я узнал о переменной '$ arg_' – Kasino

Смежные вопросы