nginx下基于ThinkPHP框架的网站url重写

news/2024/5/9 19:07:33/文章来源:https://blog.csdn.net/chaoluo001/article/details/52585908

ThinkPHP在nginx下的各种rewrite伪静态看起来是很麻烦的,但了解透彻了nginx的url重写机理以及ThinkPHP的各种url模式,那么在nginx下为基于ThinkPHP的应用做特定的url重写就很容易了,本文是博主基于ThinkPHP开发的各种web应用以及为这些引用在nginx做各种url适配重写的多次实践中总结而来。

======

ThinkPHP是什么就不再多啰嗦了,ThinkPHP网址:http://www.thinkphp.cn/

ThinkPHP框架基于M-V-C思想,模块化的设计并采用了单一入口模式(单一入口但并不是只能有一个入口),这样为nginx下的url重写免去了不少麻烦。

nginx下的基于ThinkPHP的应用的url重写,需了解ThinkPHP的各种url格式参数的处理逻辑以及nginx重写的原理。简单点说,无论哪种url格式,nginx都需要执行ThinkPHP下的应用单一入口文件,然后将各种url格式按照一定的格式规则进行进行参数化处理,最终执行指定模块与控制器;这个过程用户是看不到的,用户只能看到各种规则的url,这些url的规则如下:

# 通get
htt://blog.jjonline.cn/index.php?m=Info&a=usrInfo

# pathinfo
htt://blog.jjonline.cn/index.php/Info/usrInfo
#有get
htt://blog.jjonline.cn/index.php/Info/usrInfo/Id/1

# 通get ThinkPHP
htt://blog.jjonline.cn/index.php?s=Info/usrInfo
#有get
htt://blog.jjonline.cn/index.php?s=Info/usrInfo/Id/1

/*
#当然这三种模式还可以附带文件后缀
#其实合并起来也就3种
#附带后缀只是上述三种规则的细微变化
#TinkPHP框架核心代码获取到以上三种模式的参数后
#会进行特定的处理 带不带后缀 带哪种后缀 均可配置
#也就是如下几种规则
*/

#
htt://blog.jjonline.cn/index.php/Info/usrInfo.html
#
htt://blog.jjonline.cn/index.php?s=Info/usrInfo.html

======

什么是pathinfo?pathinfo是php的功能,nginx并没有pathinfo功能,在php中书写如下代码:

<?php

print_r(pathinfo('http://blog.jjonline.cn/test/index.txt'));

?>

结果:

Array
(
[dirname] => http://blog.jjonline.cn/test
[basename] => index.txt
[extension] => txt
[filename] => index
)

通过以上运行结果,可以看到打印出来的数组key字段已经很明显的标示出其意义来了。

ThinkPHP就采用了这种思想,将单一入口的url传参格式化,典型的基于ThinKPHP的url示例如下:

http://blog.jjonline.cn/index.php/Usr/UsrInfo

简单点理解,上述格式化的url形式就是ThinkPHP需要支持的pathinfo路径模式。对这个种格式化的url进行稍微解释,访问这个么一个地址,对基于ThinkPHP框架的网站来说,实际需要执行的就是网站根目录下的index.php文件,而该url中后面的/Usr/UsrInfo则被作为mvc思路中的功能模块参数与控制器参数,转换为普通get方式传参则上述url就要变为:

http://blog.jjonline.cn/index.php?m=Usr&a=UsrInfo

当然,get参数的变量该例子中一个是m一个是a,这个变量名在ThinkPHP中是可以改变的,这就需要依据具体的基于ThinkPHP的应用的模块规划与喜好了。

有了这种思路,nginx的url重写就有了最原始的写法了,对于上述pathinfo的格式化url,nginx在不做url重写时会把它当做一个路径来执行,一般来说没有谁会吃多了撑得在网站根目录下建立一个名字叫index.php的目录(注意:是目录,不是一般意义上的文件),所以第一种url重写出现了:

#是nginx 写url
location / {
root /var/www;
index index.html index.htm index.php;
if (!-d $request_filename) {
rewrite ^/(.*)/(.*)/*$ /index.php?m=$1&a=$2 last;
break;
}
}

但问题出现了,基于ThinkPHP的应用不仅仅只有上述例子中的这种pathinfo模式,现在变成这样的了:(为了便于解说,称如下代码段为“url示例”,后方提到“url示例”就是指此处的三种url格式)

#藏index.php 但url.html
http://blog.jjonline.cn/index.php/Usr/UsrInfo.html

#件index.php
http://blog.jjonline.cn/Usr/UsrInfo

http://blog.jjonline.cn/Usr/UsrInfo/

#访掉index.php.html
http://blog.jjonline.cn/Usr/UsrInfo.html

再了解下ThinkPHP中处理url的各种逻辑,ThinkPHP对传参进行了多种判定与处理,除了get方式传递不同的get变量作为mvc中的控制变量外,还有一个“兼容模式”的传参规则,也就是如下:

#ThinkPHP
http://blog.jjonline.cn/index.php?s=/Usr/UsrInfo

这种传参形式依然是get方式传参,但省略了多个get参数。ThinkPHP框架会对获取到的get变量$_GET['s']进行处理,从其中提取出mvc所需要的各个控制变量。

所以又一种nginx的url重写出现了:

location / {
root /var/www;
index index.html index.htm index.php;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}

那么,现在需要同时兼容上述url示例中的三种格式又出问题了。最后解决方法如下:

location / {
root /var/www;
index index.html index.htm index.php;
if (!-e $request_filename) {
rewrite ^/index.php(.*)$ /index.php?s=$1 last;
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}





本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_904455.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

李开复,你就这点能耐?弄个破ASP的山塞别人的网站还说创新?创意铁锅吧!

晕&#xff01;李开复的创新工场竟然是山寨版&#xff01;&#xff08;有图有真相&#xff09; 晕&#xff01;李开复的创新工场竟然是山寨版&#xff01; 创新工场也山寨&#xff0c;谈何创新&#xff1f;山寨工场&#xff1f; 【有图有真相】

网站服务

一、网站页面访问流程 0、客户端 浏览器输入网址信息点击回车 1、客户端 完成域名的解析过程(DNS) 2、客户端 直接访问相应网站服务器 建立TCP三次握手过程 3、客户端 访问网站服务器 发送HTTP请求报文 多次 4. 服务端 响应客户端请求 回复HTTP响应报文 多次 5. 客户端 浏览器看…

网站LNMP架构

L&#xff1a;Linux系统 注意: a selinux必须关闭 防火墙关闭 b /tmp 1777 mysql服务无法启动 N — nginx服务部署 作用:处理用户的静态请求 html jpg txt mp4/avi N&#xff1a;nginx M&#xff1a;mysql P&#xff1a;php 作用: 1. 处理动态的页面请求 2. 负责和数据库建立关…

06http网站页面访问流程

访问网站流程 1.http01.http协议及介绍1.http协议&#xff1a;2.核心&#xff1a;3.http请求报文与响应报文 02.访问网站原理及过程图03.DNS原理流程详解1.1 DNS域名的结构&#xff08;层级&#xff09;1.2 DNS解析流程详解1.3 DNS记录的类型1.4 搭建网站的流程 04.http协议补充…

07Web网站 Nginx(第一部分)

Nginx服务 1.Nginx01.Nginx介绍1.基础概念&#xff1a;2.网站服务特性&#xff1a;3.软件功能特性&#xff1a;4.nginx与apache的区别5.Nginx企业应用 02.Nginx网站服务部署1.Nginx网站服务软件部署方式2.Nginx网站服务软件安装部署过程3.Nginx配置文件4.主配置文件/etc/nginx/…

07Web网站 Nginx(第二部分)

Nginx虚拟主机设置 1.Nginx虚拟主机01.nginx虚拟主机介绍02.nginx相关错误03.虚拟主机的常见类型1 基于域名的虚拟主机的配置2 基于端口的配置3 基于IP虚拟主机的配置 04.nginx处理用户请求过程※※※05.nginx核心配置※※※1 nginx日志格式2 log_format日志格式的详细介绍 06.…

o7Web网站Nginx(第三部分)

nginx 常用模块 1.模块 ngx_http_access_module 指定网段访问功能01.功能介绍02.指令03.示例配置04.应用场景 2.模块 ngx_http_auth_basic_module 页面认证功能01.功能介绍02.指令03.示例配置04.应用场景 3.模块 ngx_http_autoindex_module 列表目录01.功能介绍02.指令03.示例配…

07 Web网站 Nginx (第四部分)

企业应用Nginx以及LNMP架构 1.企业应用过程2.利用Nginx搭建一个多网站3.访问形式4.LNMP架构实现过程01.LNMP架构说明1 搭建网站必备环境2 LNMP架构环境部署 02.LNMP架构读写原理与通信原理解析1实现Nginx与PHP.server的通信2实现PHP.server与MySQL的通信 1.企业应用过程 &#…

07 Web网站 Nginx (第五部分)

LNMP架构补充 负载均衡 高可用服务 01.LNMP补充1.LNMP上节课补充2.LNMP架构与存储服务器建立联系3.LNMP架构与数据库服务建立联系&#xff08;数据迁移&#xff09; 02.Nginx反向代理 负载均衡1.反向代理 负载均衡说明2.什么是反向代理&#xff0c;什么是负载均衡&#xff1f;3…

新媒体专员必备素材网站,没有灵感,找它就对了!

大家都知道&#xff0c;新媒体运营专员每天都要写很多文字&#xff0c;很多不同的&#xff0c;优质的内容来达到自己的目的&#xff01; 但是&#xff0c;天天写&#xff0c;日日写&#xff0c;肚子里再多墨水也有干涸的时候&#xff01;当我们写不出东西时&#xff0c;该怎么…

给大家分享个 网站头像上传的 插件

给大家分享个 网站头像上传的 插件&#xff0c;可以实现头像的修改&#xff0c; 下载链接&#xff1a;http://download.csdn.net/detail/abc456456456456/6621241

学会了SEO就真的会网络营销吗?

目前国内的形式是跟风流&#xff0c;最近SEO的兴起带起了不少SEO培训机构的兴起&#xff0c;线上培训&#xff0c;线下培训屡见不鲜&#xff0c;我也会是在一所培训机构中认识SEO的从而创立了现在的泰州SEO博客网站!SEO的兴起带动了不少企业以及个人的网赚理想&#xff0c;因为…

http://nian.so/#网站的拓展工具编写

这个网站叫做念我用了很久&#xff0c;有安卓和ios版本&#xff0c;我对网页版进行了处理&#xff1b; 写了此社交网站的一个拓展工具。 功能–&#xff1a;对自己或者他人的进展页面内容进行处理&#xff0c;可以筛选关键字。不需要可以隐藏。简单有效。其他页面无法使用。 …

HTML基础——网站图片显示页面

1、图片标签 <img /> 属性&#xff1a;     src:指的是图片显示的路径(位置)       绝对路径&#xff1a;D:\Pictures\Saved Pictures       相对路径&#xff1a;           ①同一级&#xff1a;直接写文件名称或者./文件名称        …

网站银联支付证书更换

题记&#xff1a; 因为公司项目已经运行几年 银联支付的证书在这个月底到期需要更换 步骤: 1.登录 地址: https://merchant.unionpay.com/cas/login 2.点击商户服务平台 3. 3.点击安全证书管理 4.点击下载证书 5.确认启用该证书 禁用要过期的证书 6.点击ie的设置按钮…

手机H5如何对接支付宝登陆授权以及支付(H5网站支付)

场景需求&#xff1a; 通过支付宝扫描二维码进入手机H5网站,获取用户唯一标识appid来标识用户以及处理逻辑。一系列操作后&#xff0c;调起支付窗口完成支付宝支付 1、支付宝开放平台配置 1、登陆支付宝开放平台中心&#xff0c;选择“ 网页&移动应用 ”&#xff0c;然后…

网站demo

学成教育在线网站demo <style>*{margin: 0;padding: 0;}.w{width: 1200px;margin: auto;}body{background-color: #f3f5f7;}/*清除li前面的原点*/li{list-style: none;}/*ul,li{margin:0; padding:0;}*/a{text-decoration: none;}/*清除浮动&#xff0c;咱也不清楚&#…

大型网站架构演变和知识体系

转自&#xff1a;http://www.phpchina.com/html/40/n-35340.html 之前也有一些介绍大型网站架构演变的文章&#xff0c;例如LiveJournal的、ebay的&#xff0c;都是非常值得参考的&#xff0c;不过感觉他们讲的更多的是每次演变的结果&#xff0c;而没有很详细的讲为什么需要做…

springboot“传情旧物”网站计算机毕业设计(源码、运行环境)

登录界面 旧物信息 公告信息 首页 本源代码和数据库都放至公众号毕业admin,需要此套源代码可以在公众号里获取。

springboot报价制酒水交易网站计算机毕业设计(源码、运行环境)

登录界面 商家界面 商品信息 商家注册界面 首页 本源代码和数据库都放至公众号毕业admin,需要此套源代码可以在公众号里获取。