pathinfo,一種僞靜态的用法,路由模式,即路徑:http://blog.csdn.net/bjash/article/details/8466789 而普通模式則是:http://blog.csdn.net/控制器/方法?a=details&m=8466789,就是根據路徑内容轉成數組,再用數組分析給整個php架構,做僞靜态路徑也比較常見
1.讓 Apache 支援 PathInfo
配置的 Apache 版本 : 2.2.13
在配置檔案中加入
<Files *.php>
AcceptPathInfo On
</Files>
這樣 Apache 就可以支援針對 php 檔案的 PathInfo 了.
2、pathinfo 模式 需要 php.ini 開啟下面這個參數
cgi.fix_pathinfo=1
path_info模式:http://www.xxx.com/index.php/子產品/方法
而且nginx 環境下,如果 uri 含中文,PATH_INFO就被截斷了,會新産生一個 ORIG_PATH_INFO,才是正确的,
3.讓 Nginx 支援 PathInfo
在配置檔案裡添加
location ~ \.php
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
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;
include conf/fcgi.conf;
}
thinkPHP中pathinfo四種通路模式
0:普通模式。http://bbs.aaa.net/index.php?m=user&a=d
m代表子產品a代表方法
1:叫pathinfo模式,它下面還分兩種模式。預設通路模式是http://bbs.aaa.net/index.php/user/index
2:rewrite重寫(僞靜态)。可以自己寫相關的rewrite規則,也可以使用系統為我們提供的rewrite規則。http://bbs.aaa.net/user/index。
apache手冊中有一塊是URL重寫規則,可以看一下。
3:叫做相容模式。它的路徑通路http://bbs.aaa.net/index.php?s=/user/g
當伺服器上不支援pathinfo模式的時候,但之前的路徑通路模式上面,全都用的pathinfo模式,它會提示路徑模式不正确。這時,為解決這種問題,可以用标号為3的相容模式來處理,這些都是支援GET的,是以用相容模式可以解決它。
設定通路模式,要在conf.php檔案内:
‘URL_MODEL’=> 0;
設定為2時,因為開啟URL重寫,不論是重寫的還是被重寫的,都能通過原有路徑來進行通路。
如果要開啟rewrite模式的話,1、要确認你的伺服器已經開啟了apache的rewrite子產品。apache下的httpd.conf檔案中的LoadModule rewrite..這一行的#去掉,然後重新開機伺服器。2、在與主入口檔案,項目入口檔案同級的目錄下面建立一個.htaccess檔案。記事本用vi打開,再另存為.htaccess檔案。或者是直接打開記事本,在另存為的檔案名中寫“.htaccess”一定要有引号。建好後可以直接把手冊中的rewrite部分粘過來,就可以啟用rewrite了,也就是可以直接使用http://bbs.aaa.net/user/index了,不用寫index.php或admin.php這些入口檔案了。
如果使用2 rewrite模式,會加大伺服器的性能消耗。
-------
conf.php中設定
'PATHINFO_URL_MODEL'=>1普通模式http://.../index.php/m/user/a/index加上m和a,即使把m和a的位置換一下也不影響結果a/index/m/user
普通模式必須要在前面加上/a/子產品/a/動作,并且順序可以發生變化,如果要用GET傳值 ,在這種PATHINFO模式下,要加斜線後面再加值,如:http:../index.php/m/user/a/index/username/zhangsan
2、智能模式,值為2
pathinfo預設就是智能模式,/index.php/user/index意思就是user子產品下的index方法
這種方式下GET傳值 :/username/張三
它的值傳方法與普通模式傳值一緻
-----------
‘URL_PATHINFO_DERP’='-';
這個設定是把分隔符變為中橫線(-),預設是/
------
改定界符
'APP_DEBUG'=>'true'開啟調試模式,一旦開啟,它會模拟linux作業系統來幫我們識别大小寫。并且開啟之後方法名的大小寫與,模闆檔案的大小寫有關。但模拟出來的檔案夾命名,不區分大小寫。
---
預設情況下每個方法下面的$this->display()是顯示跟這個方法名相同的模闆的,如果不想顯示這個方法名的模闆,而想顯示另一個檔案(同級)内容,直接寫$this->display('anthor');就會用anthor.html,括号裡不用寫字尾名
跨子產品顯示(以下示例的$this->display均在Index子產品下的index方法中)
$this->display('子產品名:模闆名');如$this->display('user:index');就會顯示user子產品下的index檔案
跨主題,也叫跨皮膚
在default建一個skin,在skin下建一個user檔案夾,再在它下面建一個new.html
$this->display('[email protected]:new');那這樣的話,再顯示這個頁面的時候會紅色背景
(‘皮膚的目錄名@找哪個目錄的名稱:模闆的名稱’);
---
全路徑輸出:
在主入口檔案下,建一個Public目錄,在它下建一個ss.html,在它下面再加一個背景顔色
$this->display('./Public/ss.html');再打開這個頁面就是綠色背景
注:加載檔案的位置全以主入口檔案定位。即相對于index.php這個檔案定位的。
----
還有種絕對路徑,按你的磁盤來寫('E:/AppServ/www/project/Public/ss.html');效果一樣
---
$this->display('指定位置',‘編碼’,‘檔案的mimie類型’);比如需要輸出xml檔案,就可以寫成$this->display('index','utf-8','text/xml');
轉載于:https://www.cnblogs.com/j-king/p/3657238.html