如何配置nginx,Apache支援pathinfo模式

來源:互聯網
上載者:User
我也配置了很多次了,前面都快放棄了,最近在學習resuful架構寫api,代碼實現上沒出現啥問題,倒是這個path_info的環境配置把我弄的比較鬱悶你一定見過類似這樣的路徑:http://www.04007.cn/index.php/home/index/action/3408.html,對,這就是phpinfo模式。從上面可以看出其有以下幾個特點。

1,URL中帶有入口檔案全名,即index.php,

2,在入口檔案後面依然跟有路徑比如上面的/home/index/action/3408.html

3,很多架構中後面分別是/模組/控制器/方法參數等,Thinkphp就是這樣的。當然這個不一定非得是模組控制器方法的組成。

按照常理來理解,index.php後面跟隨著路徑,那麼index.php就相當於一個檔案夾了。但實際上又不存在index.php這個檔案夾,所以如果沒有開啟phpinfo模式,那麼這個路徑解析就會報找不到檔案。而只有在開啟phpinfo模式之後,伺服器才會去執行index.php這個檔案。從伺服器上的配置方法也可以看出來。

本人使用的是整合安裝環境phpstudy,這個環境用的時間比較久

先檢查這三個配置

一:
在PHP安裝資料夾下找到PHP.INI,

;cgi.fix_pathinfo=1
改為
cgi.fix_pathinfo = On
儲存,重啟伺服器即可
也有的說將
;cgi.fix_pathinfo=1
之前的 ; 去掉,即改為
cgi.fix_pathinfo=1
儲存,重啟伺服器的。
但是我嘗試發現,這樣並不能解決問題,於是決定採用第二種方法;
二:
開啟Apache安裝資料夾下的conf檔案夾,找到httpd.conf檔案中找到下面這段代碼

<Directory />Options FollowSymLinksAllowOverride NoneOrder deny,allowDeny from allAcceptPathInfo On    //加入這行代碼就OK了</Directory>

不幸的是,按照上面的方法,還是失敗了。木辦法,只能試下第三種方法了;
三:

在設定檔中加入

<Files *.php>AcceptPathInfo On</Files>

這樣 Apache 就可以支援針對 php 檔案的 PathInfo 了。
於是,又充滿希望的試了一下,可惜,還是沒有成功。
我想,這PathInfo跟URL有關,那會不會是因為Apache伺服器沒有開啟mod_rewrite模組的關係呢?於是,我在Apache的設定檔(Apache安裝目錄的conf檔案夾下的httpd.conf檔案)裡找到:
#LoadModule rewrite_module modules/mod_rewrite.so
將前面的#去掉,改為:
LoadModule rewrite_module modules/mod_rewrite.so

下面是nginx伺服器開啟phpinfo模式的方法:

location ~ [^/]\.php(/|$){  # comment try_files $uri =404; to enable pathinfo  #try_files $uri =404; #把這行代碼注釋,讓伺服器不嘗試去載入路徑檔案  fastcgi_pass unix:/tmp/php-cgi.sock;  fastcgi_index index.php;  include fastcgi.conf;  include pathinfo.conf; #載入phpinfo.conf配置}

重啟nginx伺服器即可。對於Apache伺服器,需要先載入rewrite模組,將http.conf中的配置AllowOverride None將None改為 All,重啟Apache即可。在.htaccess檔案中加入

RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

注:在配置虛擬網域名稱的時候我的配置

我給個我的配置成功的php.ini和httpd.comf把,我在另外一台電腦沒有成功的原因可能是我多加了個這個指向到項目地址的配置,例如我下面這個配置把

DocumentRoot  "E:\phpstudy\WWW\restful"<Directory />    Options +Indexes +FollowSymLinks +ExecCGI    AllowOverride All    Order allow,deny    Allow from all    AcceptPathInfo On     Require all granted</Directory>

指向到了項目單項目的根地址下把

我的配置的下載地址:

http://download.csdn.net/download/qq_27229113/9981419

最近在學慣用restful架構寫api,發現自己路由存在這個問題

我把虛擬網域名稱指向為www.restfulapi.com/

虛擬網域名稱地址指向為restfulapi這個檔案夾

我的api目錄寫在restful/index.php裡面,有兩個方法,分別是users和articles兩個方法

如果我輸入http://www.restfulapi.com/restful/路由會發現還報這個錯誤Notice: Undefined index: PATH_INFO in E:\phpstudy\WWW\restfulapi\restful\index.php on line 107
{"error":"請求資源不被允許"}

但是輸入這個路由時http://www.restfulapi.com/restful/users

便有資料反饋{"error":"使用者名稱不可為空"}

在代碼index.php列印載入的配置

var_dump($_SERVER);
反饋結果為
array(39) {    ["REDIRECT_STATUS"]=>    string(3) "200"    ["HTTP_HOST"]=>    string(18) "www.restfulapi.com"    ["HTTP_CONNECTION"]=>    string(10) "keep-alive"    ["HTTP_CACHE_CONTROL"]=>    string(9) "max-age=0"    ["HTTP_USER_AGENT"]=>    string(108) "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36"    ["HTTP_UPGRADE_INSECURE_REQUESTS"]=>    string(1) "1"    ["HTTP_ACCEPT"]=>    string(85) "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"    ["HTTP_ACCEPT_ENCODING"]=>    string(13) "gzip, deflate"    ["HTTP_ACCEPT_LANGUAGE"]=>    string(14) "zh-CN,zh;q=0.8"    ["PATH"]=>    string(272) "C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\adb"    ["SystemRoot"]=>    string(10) "C:\Windows"    ["COMSPEC"]=>    string(27) "C:\Windows\system32\cmd.exe"    ["PATHEXT"]=>    string(53) ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC"    ["WINDIR"]=>    string(10) "C:\Windows"    ["SERVER_SIGNATURE"]=>    string(0) ""    ["SERVER_SOFTWARE"]=>    string(47) "Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.5.38"    ["SERVER_NAME"]=>    string(18) "www.restfulapi.com"    ["SERVER_ADDR"]=>    string(9) "127.0.0.1"    ["SERVER_PORT"]=>    string(2) "80"    ["REMOTE_ADDR"]=>    string(9) "127.0.0.1"    ["DOCUMENT_ROOT"]=>    string(26) "E:/phpstudy/WWW/restfulapi"    ["REQUEST_SCHEME"]=>    string(4) "http"    ["CONTEXT_PREFIX"]=>    string(0) ""    ["CONTEXT_DOCUMENT_ROOT"]=>    string(26) "E:/phpstudy/WWW/restfulapi"    ["SERVER_ADMIN"]=>    string(18) "admin@phpStudy.net"    ["SCRIPT_FILENAME"]=>    string(44) "E:/phpstudy/WWW/restfulapi/restful/index.php"    ["REMOTE_PORT"]=>    string(5) "59338"    ["REDIRECT_URL"]=>    string(14) "/restful/users"    ["GATEWAY_INTERFACE"]=>    string(7) "CGI/1.1"    ["SERVER_PROTOCOL"]=>    string(8) "HTTP/1.1"    ["REQUEST_METHOD"]=>    string(3) "GET"    ["QUERY_STRING"]=>    string(0) ""    ["REQUEST_URI"]=>    string(14) "/restful/users"    ["SCRIPT_NAME"]=>    string(18) "/restful/index.php"    ["PATH_INFO"]=>    string(6) "/users"    ["PATH_TRANSLATED"]=>    string(32) "E:\phpstudy\WWW\restfulapi\users"    ["PHP_SELF"]=>    string(24) "/restful/index.php/users"    ["REQUEST_TIME_FLOAT"]=>    float(1505533005.973)    ["REQUEST_TIME"]=>    int(1505533005)    }    {"error":"使用者名稱不可為空"}
 發現 ["PATH_INFO"]=>string(6) "/users" 說明這個path_info配置只指向到了restful/users和restful/articles目錄下我懷疑是我的路由配置的原因在開啟我的  .htaccess檔案夾RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME}  !-fRewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]還有我發現運行這個http://www.restfulapi.com/restful/users路由的時候會經過二次跳轉才訪問到最終api,感覺這裡存在問題

經過測試得出下面個人結論

在實際非api註冊中的路由是www.restfulapi.com,可以完成使用者註冊,而我們使用resuful架構進行api
註冊使用者時的路由是www.restfulapi.com/restful/users和文章api www.restfulapi.com/restful/articles的路由既可以
是個人對路由理解不夠透徹吧!總結下,上面的路由配置和php.ini和http.conf配置才是重點,完成好就可以實現php的pathinfo模式,

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.