入口檔案是應用的唯一入口,因為可以多入口,每個應用可以對應一個入口檔案,系統會從rul參數中解析目前請求的子產品,控制器,操作。ThinkPHP是區分大小寫的,考慮到linux是區分大小寫的,是以在ThinkPHP中子產品,控制器,模型等都是區分大小寫的,并且使用駝峰命名規則。
如果我們直接通路入口檔案index.php,url中沒有給出子產品,控制器,操作,系統會預設通路Home子產品下的Index控制器下的index操作,是以下面的兩種通路方法得到的結果是一樣的:
<code>http://serverName/index.php</code>
<code>http://serverName/index.php/Home/Index/index</code>
這種URL模式是PATHINFO模式,ThinkPHP支援四種url模式,清單如下:
URL模式 URL_MODEL設定
普通模式 0
PATHINFO模式 1
REWRITE模式 2
相容模式 3
如果整個項目使用相同的url模式可以在應用配置檔案中設定url模式,如果不同的子產品設定不同的模式,可以在子產品的配置檔案中設定。前面一句"應用配置檔案",是那個檔案呢,是thinkphp\Application\Common\Conf\config.php這個嗎,後面的好了解,每一個子產品對用一個config檔案,Admin子產品對應的是thinkphp\Application\Admin\Conf\config.php,Home子產品對應的配置檔案是thinkphp\Application\Home\Conf\config.php
普通模式
普通模式是使用傳統的get傳參來指定目前的子產品,控制,操作例如:<code>http://servername/?m=home&c=user&a=login&var=value,經我實驗,即使把URL_MODEL設定成1,2,3還是可以使用這種get傳參的方式來發通路,PATH_INFO變量放在thinkphp\ThinkPHP\Conf\convention.php檔案裡,我的設定如下:</code>
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuQ2MjFGOjFjYiNjYlljM4ATZxYzMmNmY2cDZzQjZzUWYfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
圖1
通路界面如下:
圖2
修改子產品為Home子產品通路結果如下:
圖3
這個感覺有點亂了,既然設定成3le,還是可以使用第一種模式呢?
PATH_INFO模式
PATHINFO模式是系統的預設URL模式,提供了最好的SEO支援,系統内部已經做了環境的相容處理,是以能夠支援大多數的主機環境。對應上面的URL模式,PATHINFO模式下面的URL通路位址是: http://localhost/index.php/home/user/login/var/value/
還可以修改參數的分分隔符,例如我現在配置如下:
圖4
現在可以使用下滑下劃線來區分參數了,如下:
圖5
REWRITE模式
REWRITE模式是在PATHINFO模式的基礎上添加了重寫規則的支援,可以去掉URL位址裡面的入口檔案index.php,但是需要額外配置WEB伺服器的重寫規則。如果是Apache則需要在入口檔案的同級添加.htaccess檔案,内容如下:
接下來,就可以用下面的URL位址通路了: http://localhost/home/user/login/var/value
相容模式
相容模式是用于不支援PATHINFO的特殊環境,URL位址是: http://localhost/?s=/home/user/login/var/value ,什麼情況下不支援PATHINIFO?作者沒有提到
可以更改相容模式變量的名稱定義,例如:
'VAR_PATHINFO' => 'pathinfo'PATHINFO參數分隔符對相容模式依然有效,例如:
// 更改PATHINFO參數分隔符'URL_PATHINFO_DEPR'=>'-', 使用以上配置的話,URL通路位址可以變成: http://localhost/?s=/home-user-login-var-value
相容模式配合Web伺服器重寫規則的定義,可以達到和REWRITE模式一樣的URL效果。
例如,我們在Apache下面的話,.htaccess檔案改成如下内容:
這個和上面的REWRITE類似隻有最後一句不同,一個是RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L],一個是RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L],讨厭的正規表達式!不懂
就可以和REWRITE模式一樣通路下面的URL位址通路了: http://localhost/home/user/login/var/value