php - 有關路由的實現
仅有的幸福
仅有的幸福 2017-06-26 10:49:00
0
3
930

使用網站網站軟體時,發現有的軟體的根目錄下的index.php可以產生多個不同的網頁,如:

localhost/index.php/blog;localhost/index.php/contact。

請問這種路由方式是如何實現的?謝謝!

仅有的幸福
仅有的幸福

全部回覆(3)
黄舟

對於localhost/index.php,存取的檔案位址是 localhost/index.php 沒錯,然後 /blog,可以理解成參數,

至於怎麼獲取呢 ?查看 $_SERVER 的資訊吧。

比如說,'/blog' 參數對應的是 Blog 控制器的 index 方法,然後可以透過呼叫 (new Blog())->index() 來實現對應的邏輯。

在往下說,'/blog/add' 參數,對應 Blog 控制器的 add 方法,然後可以透過呼叫 (new Blog())->index() 實現對應的邏輯。

淡淡烟草味

對於伺服器來說,www.xxx.com/index.php/test只能辨識到www.xxx.com/index.php,這個是在Nginx或Apche裡面配置的,例如下面一段設定:

location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
    }

至於後面的信息test,是PHP代碼自己去識別的,其實就是一個參數,(至於PHP代碼怎麼接收到這個參數,你就得去看看Nginx或者Apache是​​怎麼和PHP交互的了),當這個參數"test"拿到以後,就可以根據這個參數做你想做的事,不同的參數,你就可以做不同的事,提供多樣的功能,這也是我對路由的理解。

滿天的星座

後面的參數格式叫做 PATH_INFO, apache預設提示, nginx要自己正規比對一下.

這個就跟index.php?url=/path/to/xxx 一樣. 只是用一個參數來表示項目的路由的.

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板