You may often see this path on the internet (www. aaa. comaaabbbaaa? Id5), confusing. There are several possibilities for implementing such a website: 1. hiding the file extension. There are different opinions on the benefits of this approach, but I personally think it is unnecessary; 2, with the website redirection rules, to achieve virtual paths; 3, forced file parsing, we may often see such a path on the Internet (http://www.aaa.com/aaa/bbb/aaa? Id = 5), confusing. There are several possibilities for implementing such a website:
1. hiding the file extension has different opinions on the advantages of this approach, but I personally think it is unnecessary;
2. use website redirection rules to implement virtual paths;
3. implement virtual paths by Force file resolution.
The 2nd \ 3 method can be used to achieve unified website interfaces, reasonably integrate websites, and better reflect the security and architecture of websites, most websites using these two methods are built and implemented using the "MVC" mode.
The following is an example.
The access path is as follows:
.../Test/******/Bad .../Test/******/Good (The "*******" can be replaced with any string. "..." is your web path) |
The directory structure of the file is as follows:
| --. Htaccess | -- Test | -- Application. php | -- Controler/GoodControler. php | -- Controler/BadControler. php |
Note that the file ". htaccess" cannot be directly created in windows. it can be created in command line mode.
File 0 (. htaccess) (This file is used to change the apache configuration method)
Forcetype application/x-httpd-php |
File 1 (test. php)
/*------------------------------------- * Test. php * * Files used as the portal for your website * Used for initialization and entry * Call and execute the call of Controler * -------------------------------------*/ Require "Application. php "; $ Aa = new Application (); $ Aa-> parse (); $ Aa-> go ();
?> |
File 2 (GoodControler. php)
/*------------------------------------- * GoodControler. php * * Used to control access from url =/test/Good * -------------------------------------*/ Class GoodControler { /* * Control Class Call method, the only interface reported to the external */ Function control (){ Echo "this is from GoodControler url = *********/test/Good "; } } ?> |
File 3 (BadControler. php)
/*------------------------------------- * BadControler. php * * Used to control access from url =/test/Bad * -------------------------------------*/ Class BadControler { /* * Control Class Call method, the only interface reported to the external */ Function control (){ Echo "this is from GoodControler url = *********/test/Bad "; } } ?> |
File 4 (Application. php)
/*------------------------------------- * Application. php * * It is used to implement a unified portal for websites and call the Controler class. * -------------------------------------*/ Class Application { // Used to record the operation to be performed Var $ action; // Name of the controler file Var $ controlerFile; // Controler class name Var $ controlerClass;
Function Application (){ }
Function parse (){ $ This-> _ parsePath (); $ This-> _ getControlerFile (); $ This-> _ getControlerClassname (); } /* * Parse the current access path to get the action to be taken. */ Function _ parsePath (){ List ($ path, $ param) = explode ("? ", $ _ SERVER [" REQUEST_URI "]); $ Pos = strrpos ($ path ,"/"); $ This-> action = substr ($ path, $ pos 1 ); } /* * Parse the path of the controler file to be used for the $ action through the action $ action. */ Function _ getControlerFile (){ $ This-> controlerFile = "./Controler/". $ this-> action. "Controler. php "; If (! File_exists ($ this-> controlerFile )) Die ("Controler file name (". $ this-> controlerFile. ") parsing error "); Require_once $ this-> controlerFile; } /* * Parse the $ action to get the controler class name for this $ action. */ Function _ getControlerClassname (){ $ This-> controlerClass = $ this-> action. "Controler "; If (! Class_exists ($ this-> controlerClass )) Die ("Controler class name (". $ this-> controlerClass. ") parsing error "); } /* * Call controler to execute the controler action. */ Function go (){ $ C = new $ this-> controlerClass (); $ C-> control (); } } ?> |