Когда PATH_INFO, установленный nginx, является пустой строкой, я получаю некоторый символ нежелательной почты, обращаясь к нему с PHP.
Вот как я установил PATH_INFO в nginx:
fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info;
Он отлично работает, если информация о пути имеет некоторое непустое значение. Я даже переустановил nginx, но это не помогло. Версия nginx 1.0.5 (я использую Ubuntu 11.10, если вообще это имеет значение).
Я получил то же самое мнение несколько дней назад .. поэтому я изменил регулярное выражение, чтобы выглядеть так:
fastcgi_split_path_info ^(.+\.php)(/.*)$;
И добавил другие строки, чтобы сделать его наиболее вероятным для Apache.
Вот весь diff, который я сделал с файлом fastcgi_params
@@ -3,13 +3,22 @@ fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; -fastcgi_param SCRIPT_FILENAME $request_filename; +#fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; +fastcgi_split_path_info ^(.+\.php)(/.*)$; +fastcgi_param PATH_INFO $fastcgi_path_info; +set $path_translated ""; +if ($fastcgi_path_info) { + set $path_translated $document_root$fastcgi_path_info; +} +fastcgi_param PATH_TRANSLATED $path_translated; +fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
Используя эту конфигурацию, у вас всегда есть переменная PATH_INFO, а не как это делается в fe Apache.
Некоторые из сценариев, которые я использовал, просто проверяли так (что, конечно, не работает) с моей конфигурацией:
if (!isset($_SERVER['PATH_INFO']) { doSomething() }
Я рекомендовал главному разработчику изменить его на это:
if (!isset($_SERVER['PATH_INFO'] || empty($_SERVER['PATH_INFO']) { doSomething() }
Если вы хотите взглянуть на мою полную серверную конфигурацию, просто взгляните в этот github-репозиторий: https://github.com/SimonSimCity/webserver-configuration/
Изменить: я нашел блог с немного другим решением. Я еще не тестировал его, но, похоже, он немного меньше;) http://www.jzxue.com/fuwuqi/http-iis-apache/201108/19-8538.html
set $path_info ""; set $real_script_name $fastcgi_script_name; if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") { set $real_script_name $1; set $path_info $2; } fastcgi_param SCRIPT_FILENAME /var/html/$real_script_name; fastcgi_param SCRIPT_NAME $real_script_name; fastcgi_param PATH_INFO $path_info;