Re: FastCGI, $query_string и PHP (Drupal)

Denis F. Latypoff denis at gostats.ru
Sat Feb 2 11:16:13 MSK 2008


Hello Михаил,

Friday, February 1, 2008, 6:40:14 PM, you wrote:

> Добрый день. Есть nginx 0.5.26, под ним через FastCGI бегает PHP (Drupal).
> Проблема, наверное, известная, и подобный вопрос не раз задавался, но
> решения я так и не нашел.

> Вообщем, пользователь вводит в форму поиска строку, например, "пластиковые
> окна". Браузер отправляет запрос:
> GET /search/node/пластиковые+окна HTTP/1.1

> Этот запрос через реврайт преобразуется в следующий:
> GET /index.php?q=search/node/пластиковые+окна HTTP/1.1

> Однако, FactCGI-серверу query string передается заэскейпенный (%2B вместо
> +):
> GET /index.php?q=search/node/пластиковые%2Bокна HTTP/1.1

> Таким образом, "пластиковые окна" превращаются в "пластиковые+окна".

> Вопрос: как получить незаэскейпенную $query_string в конфиге и передать ее
> FastCGI? Или как по-другому решить эту проблему?

> Куски конфига:

> # Реврайтинг

>    if (!-e $request_filename) {
-       rewrite ^/(.*)$ /index.php?q=$1 last;
+       rewrite .*      /index.php?q=$request_uri last;
>       break;
>    }

> # PHP
>   location ~ .php$ {
>     fastcgi_pass   127.0.0.1:8888;
>     fastcgi_index  index.php;

>     fastcgi_param  SCRIPT_FILENAME  /var/www/xxxxxxxxx$fastcgi_script_name;
>     fastcgi_param  QUERY_STRING     $query_string;
>     fastcgi_param  REQUEST_URI      $request_uri;
>     fastcgi_param  REQUEST_METHOD   $request_method;
>     fastcgi_param  CONTENT_TYPE     $content_type;
>     fastcgi_param  CONTENT_LENGTH   $content_length;
>     fastcgi_param  REMOTE_USER      $remote_user;
>     fastcgi_param  REMOTE_ADDR      $remote_addr;
>     fastcgi_param  REMOTE_PORT      $remote_port;
>   }

> Михаил.



-- 
Best regards,
 Denis                            mailto:denis at gostats.ru






More information about the nginx-ru mailing list