在使用tp5框架的時候,沒有重寫url地址的情況下,域名后面的后綴是非常長的,而url的地址長了的話就會對seo很不友好,所以在這種情況下,我們就應該對url地址進行配置
這個時候,就需要定義路由了。定義路由,就是假設按照上面的網(wǎng)址,那么訪問這樣網(wǎng)站的時候,也是可以正確訪問。那么就是定義路由成功了。定義路由的規(guī)則也可以自己定
在thinkphp5框架的application文件夾中,有route.php文件,這個文件中就是定義路由規(guī)則的。
下面這張圖,是域名和定義路由規(guī)則的對應關系
路由解釋:不看域名部分,url中以hello開始的,有參數(shù)name的,都會去訪問index模塊下的index控制器下的hello方法。條件就是是get請求,后綴為html
上面的[:name]加方括號的原因是表示這個參數(shù)可以有,也可以沒有,是可選的。如果將方括號去掉,那么用戶提交url的時候,就必須要有這個參數(shù),否則就會報錯。只有像這樣,添加參數(shù)之后,才能訪問成功
如果不想在route.php中配路由的話,也可以這么配
如果要傳入多個參數(shù),就發(fā)現(xiàn)路徑又很長了
因此,為了更短的路徑,就需要再次去config.php中進行配置
配置好了之后,再去url欄輸入地址嘗試
可以看到,參數(shù)和參數(shù)值都可以一一對應了。那么這樣有什么好處呢?這樣就可以欺騙搜索引擎的抓取了。讓搜索引擎誤認為這就是訪問的是hello文件夾下的aaa文件夾下的那個很長名字的文件。而實際上,這里卻是用戶提交的多個參數(shù)、參數(shù)值。
再看一個例子:
這里例子可以看到:year和:month是必選的參數(shù),如果給他們直接加上[]方括號,那么會報錯。加了方括號,代表他們是可選的,既然是可選的,在原來的控制器的today方法中就需要給形參year和month賦予默認值,這樣就不會報錯了。
至于為什么要生成url地址,暫時還不清楚,接著往下學(貌似是為了得到一個路徑,這個路徑有用)
首先,要想使用生成url的函數(shù),那么必須得先引入一些類文件,否則就會出現(xiàn)如下報錯
引入類文件之后,就可以正常使用相應的方法了
如下圖,框出來的部分所代表的含義是使用Url::build方法,將a=1&b=2這個參數(shù)傳到當前控制器中的url2方法中。若沒有url2,那么默認傳到當前方法中
但是,在導入url類文件之后,建議不用上面的那種框出來的使用方法,建議直接使用url()方法,更加簡潔省事,效果還一樣。
除此之外我們還可以在Apache中重寫url,詳情請參考:Apache URL重寫規(guī)則