摘要:現(xiàn)在要做的就是在接收的模式的請求時,將它還原成標(biāo)準(zhǔn)的模式,這樣服務(wù)器就能正常處理了。還好,中有個指令可以實現(xiàn)我們的目的,。
使用過 ThinkPHP 框架開發(fā)應(yīng)用的同學(xué)應(yīng)該都會知道,它有一種 URL 模式是 pathinfo,看起來類似下面的 URL:
http://example.com/module/controller/action/key1/value1/key2/value2.html
其實上面的 URL 的原型是下面的樣子:
// 這個才是正宗的 URL,上面那個是冒牌的 http://example.com/index.php?m=module&c=controller&a=action&key1=value1&key2=value2
既然 pathinfo 模式的 URL 不是正宗的,那為什么不用正宗的呢,用正宗的不好嗎?相對于正宗的 URL,pathinfo 模式的確實是有優(yōu)勢的,以下簡單列舉幾項它的好處。
它提供了最好的SEO支持
可以實現(xiàn) URL 的偽靜態(tài)
它看起來更簡潔、更好看
pathinfo 模式的 URL 有這么多優(yōu)點,那我們肯定要支持了。ThinkPHP 更多的 URL 模式配置及實現(xiàn),可以參考這篇文檔。
本文主要討論的是 pathinfo 模式的 URL 在 Nginx 中的實現(xiàn),ThinkPHP 官方文檔中沒有介紹,但是它實現(xiàn)起來也挺簡單的。以下是實現(xiàn)過程的一些思考。
一個標(biāo)準(zhǔn)的通用的 URL 格式是類似下面那樣子的:
:// : @ : / ; ? #
參照通用的 URL 格式,對比可以發(fā)現(xiàn),pathinfo 模式的相對于標(biāo)準(zhǔn)模式的 URL,有兩個地方的區(qū)別比較大,一個是沒有了 index.php 文件,另一個是查詢參數(shù)并沒有使用符號“?”隔開。
現(xiàn)在要做的就是在 Nginx 接收的 pathinfo 模式的 URL 請求時,將它還原成標(biāo)準(zhǔn)的 URL 模式,這樣服務(wù)器就能正常處理了。
把缺失的 index.php 文件補上
這個需要用到 Nginx 的 rewrite 指令,它的作用是將請求的 URI 替換成目標(biāo) URL。在這里需要達(dá)到的效果是,將
http://example.com/module/controller/action/key1/value1/key2/value2.html
替換成
http://example.com/index.php/module/controller/action/key1/value1/key2/value2.html
當(dāng)然,并不是所有的 URI 都會進(jìn)行此規(guī)則的重寫,只有那些不是文件的 URI 才進(jìn)行重寫。所以,關(guān)于重寫的指令將會類似下面的:
# 如果請求的文件不存在,則進(jìn)行 URI 重寫 # 在原有的基礎(chǔ)上添加入口文件 index.php if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1 last; }
通過以上配置就能達(dá)到補全 index.php 入口文件的效果了。
區(qū)分符號 ?前后的內(nèi)容
在通用的 URL 中,符號“?”是具有特殊作用的,它是用來將查詢字符串和前面的文件隔開。在 pathinfo 模式的 URL 中,符號“?”沒有了,也就是說,服務(wù)器無法區(qū)分 URI 中哪些是文件,哪些是查詢字符串了。所以,我們的目的是將 pathinfo 模式中本來應(yīng)該由符號“?”區(qū)分的內(nèi)容給手動區(qū)分開來。
還好,Nginx 中有個指令可以實現(xiàn)我們的目的,fastcgi_split_path_info。它可以將正則表達(dá)式定義的兩個串分別賦值給變量 $fastcgi_script_name 和變量 $fastcgi_path_info,以供后文使用。更多關(guān)于 fastcgi_split_path_info 的信息,請查閱這里
相關(guān)配置類似下面的代碼:
location ~ ^(.+.php)(.*)$ { root /var/www/html/$vhost_path; fastcgi_pass phpfpm:9000; fastcgi_split_path_info ^(.+.php)(.*)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; include fastcgi_params; }
一個簡單的例子
通過上面兩部份的配置,現(xiàn)在的 Nginx 服務(wù)器已經(jīng)支持 pathinfo 模式的 URL 了,以下是一個簡單的 server 配置,僅供參考:
server { listen 80; server_name tp5.loc; set $vhost_path tp5/public; location / { root /usr/share/nginx/html/$vhost_path; index index.php index.html index.htm; if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1 last; } } location ~ ^(.+.php)(.*)$ { root /var/www/html/$vhost_path; fastcgi_pass phpfpm:9000; fastcgi_split_path_info ^(.+.php)(.*)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; include fastcgi_params; } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/25855.html
摘要:現(xiàn)在要做的就是在接收的模式的請求時,將它還原成標(biāo)準(zhǔn)的模式,這樣服務(wù)器就能正常處理了。還好,中有個指令可以實現(xiàn)我們的目的,。 使用過 ThinkPHP 框架開發(fā)應(yīng)用的同學(xué)應(yīng)該都會知道,它有一種 URL 模式是 pathinfo,看起來類似下面的 URL: http://example.com/module/controller/action/key1/value1/key2/value2...
摘要:客戶端允許上傳的最大文件大小不然會出現(xiàn)錯誤監(jiān)聽端口如果不設(shè)置這個,則會監(jiān)聽所有的端口,非一定是下的端口。這個可以把去掉就是的形式是否允許訪問目錄轉(zhuǎn)發(fā)端口這邊要求必須有兩個捕獲組下面這個要求替換成,否則會出現(xiàn)錯誤 http { # 客戶端允許上傳的最大文件大小...!不然會出現(xiàn) http 413 錯誤 client_max_body_size 1000M; ...
摘要:客戶端允許上傳的最大文件大小不然會出現(xiàn)錯誤監(jiān)聽端口如果不設(shè)置這個,則會監(jiān)聽所有的端口,非一定是下的端口。這個可以把去掉就是的形式是否允許訪問目錄轉(zhuǎn)發(fā)端口這邊要求必須有兩個捕獲組下面這個要求替換成,否則會出現(xiàn)錯誤 http { # 客戶端允許上傳的最大文件大小...!不然會出現(xiàn) http 413 錯誤 client_max_body_size 1000M; ...
摘要:最近使用框架進(jìn)行開發(fā)的時候遇到一個問題,把項目部署到上用當(dāng)服務(wù)器的情況下,重定向出現(xiàn)問題,同樣的后綴,在本地環(huán)境可以正常訪問,在服務(wù)器上就出現(xiàn)了,但是使用的全路徑是可以訪問的。 最近使用thinkPHP框架進(jìn)行開發(fā)的時候遇到一個問題,把項目部署到Linux上用nginx當(dāng)服務(wù)器的情況下,URL重定向出現(xiàn)問題,同樣的URL后綴,在本地環(huán)境可以正常訪問,在服務(wù)器上就出現(xiàn)了404 ,但是使用...
摘要:最近使用框架進(jìn)行開發(fā)的時候遇到一個問題,把項目部署到上用當(dāng)服務(wù)器的情況下,重定向出現(xiàn)問題,同樣的后綴,在本地環(huán)境可以正常訪問,在服務(wù)器上就出現(xiàn)了,但是使用的全路徑是可以訪問的。 最近使用thinkPHP框架進(jìn)行開發(fā)的時候遇到一個問題,把項目部署到Linux上用nginx當(dāng)服務(wù)器的情況下,URL重定向出現(xiàn)問題,同樣的URL后綴,在本地環(huán)境可以正常訪問,在服務(wù)器上就出現(xiàn)了404 ,但是使用...
閱讀 966·2021-11-24 09:39
閱讀 3391·2021-10-27 14:20
閱讀 2325·2019-08-30 14:08
閱讀 3365·2019-08-29 16:34
閱讀 2181·2019-08-26 12:14
閱讀 2107·2019-08-26 11:54
閱讀 2777·2019-08-26 11:44
閱讀 2479·2019-08-26 11:38