我得到了同樣的事情,一個視圖天前..所以我改變了正則表達式看起來像這樣:
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變量,而不是它是如何在做F.E. Apache的。
一些我用剛剛籤這樣的腳本是什麼(當然)不與我的配置工作:
if (!isset($_SERVER['PATH_INFO']) { doSomething() }
我勸主開發商把它改成這樣:
if (!isset($_SERVER['PATH_INFO'] || empty($_SERVER['PATH_INFO']) { doSomething() }
如果你想看看我的IM全服務器的配置,只需要在這個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;
請給一個路徑,它產生的價值的一個例子。 – DaveRandom
當url類似'http:// localhost/myapp/index.php'時,PATH_INFO應該是空的,但會返回垃圾。當它是'http:// localhost/myapp/index.php/testing'時,PATH_INFO是「/ testing」。 – viky
當你說它返回垃圾時,你能舉出這個垃圾的例子嗎? – DaveRandom