RE: Это баг или фича? и как это можно победить без использовани if ?

maxhl на hitline.net.ua maxhl на hitline.net.ua
Пт Дек 25 02:07:27 MSK 2009


При копировании текста из старого сообшения в данное к сожелению появилась
ошибка :-(
Итак ситуация следующая: 
Apache + rewrite дают

$_SERVER["QUERY_STRING"]=permalink=video-1/Smotret-Kino-Besplatno-7/&query_s
tr=

Тоесть нет слеша.

Nginx и настройки от drupal (в какой то мере)

$_SERVER["QUERY_STRING"]=/permalink=/video-1/Smotret-Kino-Besplatno-7/&query
_

Что нужно подкрутить?

PS Для скриптов кодированных ioncube этот слеш смертельный.


-----Original Message-----
From: Дмитрий Андреев [mailto:itskemko at gmail.com] 
Sent: Thursday, December 24, 2009 10:25 PM
To: nginx-ru at nginx.org
Subject: Re: Это баг или фича? и как это можно победить без использовани if
?

Мне крайне лень ставить apache у себя для того чтобы проверить
изложенное ниже и утверждать с 100% уверенностью, а не 85%, так что в
крайнем случае, если ляпнул глупость, попрошу остальных участников
рассылки меня поправить.


Вообще-то RFC сейчас у вас как раз-таки Апач нарушает, а не nginx. Ну
или, что маловероятно, сам php-скрипт, но как-то изберательно:
коверкает request_uri при запросах от апача, а от nginx'а оставляет
нетронутыми. Причем судя по
http://example.com.customers.tigertech.net/phpinfo.php и
https://cgi.ccs.neu.edu/home/cgiadmin/examples/phpinfo.php (первая
страница выдачи гугла по запросу "apache phpinfo example"),
изначально, впрочем кто бы сомневался, его поведение ничуть не
отличается от поведения nginx'а в этом вопросе. Простой вопрос на
логику: если в RFC четко прописано "5.1 Request-Line

The Request-Line begins with a method token, followed by the
Request-URI and the protocol version, and ending with CRLF. The
elements are separated by SP characters. No CR or LF is allowed except
in the final CRLF sequence.

        Request-Line   = Method SP Request-URI SP HTTP-Version CRLF",
что по-вашему делать браузеру, если вы обращаетесь на
http://domain.tdl/, поле Request-URI в запросе как бы никто вдруг
необязательным не сделал. Потому / в начале есть всегда. Ну и
совершенно не вижу смысла серверу брать и менять на свое усмотрение.


24 декабря 2009 г. 21:58 пользователь <maxhl at hitline.net.ua> написал:
>
> Вечер добрый. Спрашиваю еще раз потому чо в первый раз сообщения видимо
> недошли.
> Есть набор правил .htaccess:
>
____________________________________________________________________________
> RewriteCond %{QUERY_STRING} (.*)
> RewriteCond %{REQUEST_FILENAME} !-f
> RewriteCond %{REQUEST_FILENAME} !-d
> RewriteRule ^(.*)$ index.php?permalink=$1&query_str=%1 [L,QSA]
>
> #feed
> RewriteRule ^feed/rss/$ _cache/rss_main.xml [L,QSA]
>
> #sitemap
> RewriteRule ^sitemap/$ index.php?page=sitemap [L,QSA]
> RewriteRule ^sitemap/([0-9]+)/$ index.php?page=sitemap&spage=$1 [L,QSA]
>
> #contact form
> RewriteRule ^contact/$ index.php?page=contact_form [L,QSA]
>
____________________________________________________________________________
> Примеры из руководства неработают.
> Сделал так:
> server {
>    listen 80;
>    server_name test.info;
>    access_log /home/logs/t_access.log combined;
>    error_log /home/logs/t_error.log debug;
>    server_name_in_redirect off;
>    root /home/test;
>    index index.php index.pl index.cgi index.html index.htm;
>
>    location / {
>        try_files      $uri  $uri/  @nedrupal;
>    }
>
>    location ~ \.php$ {
>        try_files      $uri  @nedrupal;
>        fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
>        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
>        fastcgi_param PATH_INFO $fastcgi_script_name;
>        fastcgi_pass unix:/mnt/md0/php-fcgi.sock;
>        fastcgi_pass_request_body off;
>        client_body_in_file_only clean;
>        fastcgi_param   REQUEST_BODY_FILE  $request_body_file;
>        fastcgi_param   CONTENT_TYPE    $content_type;
>        fastcgi_param   CONTENT_LENGTH  $content_length;
>        fastcgi_param   DOCUMENT_ROOT   $document_root;
>        fastcgi_param   DOCUMENT_URI    $document_uri;
>        fastcgi_param   GATEWAY_INTERFACE       CGI/1.1;
>        fastcgi_param   QUERY_STRING    $args;
>        fastcgi_param   REMOTE_ADDR             $remote_addr;
>        fastcgi_param   REMOTE_PORT             $remote_port;
>        fastcgi_param   REQUEST_URI             $request_uri;
>        fastcgi_param   REQUEST_METHOD  $request_method;
>        fastcgi_param   SERVER_ADDR             $server_addr;
>        fastcgi_param   SERVER_NAME             $server_name;
>        fastcgi_param   SERVER_PORT             $server_port;
>        fastcgi_param   SERVER_PROTOCOL $server_protocol;
>        fastcgi_param   SERVER_SOFTWARE nginx/$nginx_version;
>        fastcgi_param   REDIRECT_STATUS 200;
>        fastcgi_index   index.php;
>    }
>
>    location @nedrupal {
>        fastcgi_param SCRIPT_FILENAME  /home/person51/index.php;
>        fastcgi_param SCRIPT_NAME /index.php;
>        fastcgi_param PATH_INFO /index.php;
>        fastcgi_pass unix:/mnt/md0/php-fcgi.sock;
>        fastcgi_pass_request_body off;
>        client_body_in_file_only clean;
>        fastcgi_param   REQUEST_BODY_FILE               $request_body_file;
>        fastcgi_param   CONTENT_TYPE            $content_type;
>        fastcgi_param   CONTENT_LENGTH          $content_length;
>        fastcgi_param   DOCUMENT_ROOT           $document_root;
>        fastcgi_param   DOCUMENT_URI            $document_uri;
>        fastcgi_param   GATEWAY_INTERFACE       CGI/1.1;
>        fastcgi_param   QUERY_STRING    permalink=$uri&query_str=$args;
>        fastcgi_param   REMOTE_ADDR                     $remote_addr;
>        fastcgi_param   REMOTE_PORT                     $remote_port;
>        fastcgi_param   REQUEST_URI                     $request_uri;
>        fastcgi_param   REQUEST_METHOD          $request_method;
>        fastcgi_param   SERVER_ADDR                     $server_addr;
>        fastcgi_param   SERVER_NAME                     $server_name;
>        fastcgi_param   SERVER_PORT                     $server_port;
>        fastcgi_param   SERVER_PROTOCOL         $server_protocol;
>        fastcgi_param   SERVER_SOFTWARE         nginx/$nginx_version;
>        fastcgi_param   REDIRECT_STATUS 200;
>        fastcgi_index   index.php;
>    }
>
> В результате добился :
>
>
$_SERVER["QUERY_STRING"]=permalink=/video-1/Smotret-Kino-Besplatno-7/&query_
> str=
> $_SERVER["REQUEST_URI"]=/video-1/Smotret-Kino-Besplatno-7/
> $_SERVER["SCRIPT_NAME"]=/index.php
>
> Для сравнения в апаче :
>
>
$_SERVER["QUERY_STRING"]=permalink=video-1/Smotret-Kino-Besplatno-7/&query_s
> tr=
> $_SERVER["REQUEST_URI"]=/video-1/Smotret-Kino-Besplatno-7/
> $_SERVER["SCRIPT_NAME"]=/index.php
>
> Почему в nginx $uri содержит самый первый символ слеш а в апаче нет? Для
> скриптов скомпиленных ioncube это оказалось смертельно ...
> Как сделать так чтоб его небыло ?
>
>
> ____________________________
> С уважением Max ICQ 71006063
>
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru at nginx.org
> http://nginx.org/mailman/listinfo/nginx-ru
_______________________________________________
nginx-ru mailing list
nginx-ru at nginx.org
http://nginx.org/mailman/listinfo/nginx-ru


Подробная информация о списке рассылки nginx-ru