原⽣php实现页⾯路由转发(⾃定义⽹址)
原⽣php实现页⾯路由转发
实验⽬的
为了⽹址的美观(强迫症),我想让web项⽬的访问⽹址能够⾃定义,⽽不是直接通过⽂件名去访问对应的⽹页。因此本⽂我在php项⽬⾥使⽤原⽣php语法实现了路由转发功能。
当然,如果你愿意使⽤thinkphp、CI等开源的php框架,路由功能都是⾃带的(还有很多⽅便的功能),那就可以了关闭本⽂啦。
新建php项⽬
demo
| index.php
| .htaccess
└─template
home.php
php初学者项目study.php
play.php
【解释】项⽬名称demo,根⽬录下有两个⽂件index.php和.htaccess,⽂件夹template中有⼀个home.php
服务器配置(2选1)
1. apache服务器
Apache服务器会⾃动读取.htaccess⽂件,具体.htaccess语法可以⾃⼰搜⼀下,这⾥只演⽰如何实现路由。编辑.htaccess⽂件,输⼊以下内容并保存
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php [QSA,L]
【解释】RewriteEngine On表⽰打开uri重写功能,RewriteCond这⼀句是条件判断,如果访问的⽂件不存在,就会执⾏RewriteRule,⽽RewriteRule这⼀句的意思是正则表达式 ^(.*)$ 匹配到的uri都会直接转到/index.php,然后我们在index.php中写路由转发规则就可以了。
1. nginx服务器
nginx服务器不会⾃动读取.htaccess,也不⽀持.htaccess语法,这⾥需要做⼀个投机取巧的⽅法:在.htaccess中写上nginx的语法,同时把该⽂件引⼊到nginx的配置中。这样就达到了和apache同样的⽬的。编辑.htaccess⽂件,输⼊以下内容并保存
if (!-e $request_filename){
rewrite ^(.*)$ /index.php;
}
location ~ /.ht {
deny all;
}
【解释】nginx匹配失败的uri全都转给index.php,同时禁⽌访问.htaccess⽂件
最重要的⼀步:在nginx配置中,在server{}内加⼊⼀句话:
include E:/demo/.htaccess;
【解释】将该⽂件原封不动的引⼊到nginx配置中。注意使⽤绝对路径!
编写index.php路由
打开根⽬录的index.php,输⼊以下内容
<?php
//路由
$uri = $_SERVER['REQUEST_URI']; //获取uri,例如 www.abc/study,其uri="/study" switch($uri){
case "/": include "template/home.php"; break;
case "/study": include "template/study.php"; break;
case "/play": include "template/play.php"; break;
}
编写/template/下的⽹页⽂件
/template/下存放的⽹页⽂件,随便编辑点html⽤于测试。例如 home.php
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8">
<title>这⾥是home</title>
</head>
<body>
<h1>你好,这⾥是home页⾯</h1>
</body>
</html>
效果
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论