天天看點

PathInfo模式,thinkPHP模闆與控制之間的關系

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

php