Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Это баг или фича? и как э то можно победить без ис пользовани if ?
- To: nginx-ru@xxxxxxxxx
- Subject: Re: Это баг или фича? и как э то можно победить без ис пользовани if ?
- From: Дмитрий Андреев <itskemko@xxxxxxxxx>
- Date: Thu, 24 Dec 2009 23:24:38 +0300
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=evBSckwr122QH0JT/M6KPfabeQvMezJwaFL8pIuCcpk=; b=A4rjcIyMVgmXIixL/meSkh23Sm49RlqNV5Blp4vZI2bLBReLJhQWfMTfgIcyOE/p+e P+H/XcExWfkEVueqloZKwC0DnPf7IkluVp3uE/rOEwAoOQ9EKsgXDdLxMvt17Mnu6QZj oB8B75uKSVTxKEuR39TEJrUbZQGfy34RHorPw=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=NQWrUKv9Db9Z27ZwWJ1Wg7opeclugSAAUiLFHoBu/K97FGlBGaa91kTq1vb2uVNqaF Pv6rx6a8nLAyqmLJnim9T4A5Nsxdlou3Vzqe2L1hknt6WiLoU5UlBi9vNbArYyXWWyJs PnkTNkymQZ3X9Z7pRAxsnw8M7JVaDE4AL9oi4=
- In-reply-to: <677E2DBA0D714D3593C9829BA85F5A6A@WINB93PPIIQFD8>
- References: <696A5584F2F84E0A90D12C37BFED8113@WINB93PPIIQFD8> <677E2DBA0D714D3593C9829BA85F5A6A@WINB93PPIIQFD8>
Мне крайне лень ставить 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@xxxxxxxxxxxxxx> написал:
>
> Вечер добрый. Спрашиваю еще раз потому чо в первый раз сообщения видимо
> недошли.
> Есть набор правил .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@xxxxxxxxx
> http://nginx.org/mailman/listinfo/nginx-ru
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
|