-
2021-07-21 22:01:36
目的
伪静态可以隐藏后端实现原理,便于搜索引擎收藏,开起来高大上一些。
原理
通过nginx路径重写跳转到后端,再分发到控制器。
极简实现
为了简单,以
nginx
和php-fpm
的方式部署项目,网站根目录就两个文件:helpers.php
,其中存放各种函数
index.php
,用于提取路由并分发到函数中适合功能非常简单,没必要使用框架的情况。
第一步:配置nginx
location / { try_files $uri $uri/ /index.php?$query_string; }
这个路径的优先级是最低的,先查找文件和目录,如果都没有以
index.php
文件和url参数在内部重定向到fastcgi
第二步:提取路由信息
伪静态url中没有文件,只是路由信息,例如:
http://localhost/article/top?p=3
因为是内部重定向,nginx收到的
$request_uri
还是/article/top?p=3
,fastcgi收到的REQUEST_URI
也是该值,而SCRIPT_NAME
则为index.php
。通过以下函数可以得到
pathInfo
,应该为/article/top
function getPathInfo(){ $requestUri = $_SERVER['REQUEST_URI']; $pos = strpos($requestUri, '?'); if($pos !== false){ $requestUri = substr($requestUri, 0, $pos); } if ('' !== $requestUri && '/' !== $requestUri[0]) { $requestUri = '/'.$requestUri; } if (false === $requestUri || '' === $requestUri) { return '/'; } return (string) $requestUri; }
第三步:分发到控制器
因为是极简实现,仅分发到具体的函数即可。
上面的路由信息被分发到函数
article_top
,在该函数中实现具体的逻辑即可。如果没有匹配的路由就返回nginx默认的404,这样不会暴露后端信息,如果
php.ini
中关闭expose_php
则前端没有任何PHP相关的信息。require_once 'helpers.php'; $route = substr(getPathInfo(), 1); if(in_array($route, ['article/top'])){ $method = str_replace('/', '_', $route); $method(); }else{ http_response_code(404); echo '<html> <head><title>404 Not Found</title></head> <body> <center><h1>404 Not Found</h1></center> <hr><center>nginx</center> </body> </html>'; }
框架实现
框架和这类似,只不过使用了composer,功能更加丰富。
symfony/http-foundation
中有根据REQUEST_URI
提取PathInfo相关的代码,只不过,考虑到了baseurl,就是将框架放在一个目录中的情况。use Symfony\Component\HttpFoundation\Request; $request = Request::createFromGlobals(); $request->getPathInfo();
因为使用了composer,则需要将index.php放到public目录中,App中放置Controller、Model等PHP类,前端页面放到模板中,路由放到routes目录中。这样方便收集路由,并分发到Controller子类的具体方法。
网站的根目录需要是public,就是代码的一个子目录。
更多相关内容 -
PHP 伪静态隐藏传递参数名的四种方法
2020-12-17 23:05:35php //伪静态方法一 // localhost/php100/test.php?id|1@action|2 $Php2Html_FileUrl = $_SERVER[“REQUEST_URI”]; echo $Php2Html_FileUrl.” ”; // /php100/test.php?id|1@action|2 $... -
php 伪静态之IIS篇
2021-01-20 01:08:26有的win主机IIS不支持 .htaccess 文件, 我在这里指的不是本地 在本地的话用apmserv服务器可以用.htaccess 文件,用apmserv服务器环境配置伪静态可以看 php 伪静态 (url rewrite mod_rewrite 重写) 这篇文章,讲的很... -
PHP伪静态写法附代码
2020-10-30 09:48:48PHP伪静态写法 伪静态又名:URL重写主要是为了SEO而生的。(SEO是什么?这个不用问我吧。呵呵~搞网络的不懂SEO那就~~~~) -
PHP伪静态Rewrite设置之APACHE篇
2020-10-25 14:40:46Rewirte主要的功能就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范。平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等 -
php伪静态之APACHE篇
2021-01-20 01:06:501.检测Apache是否支持mod_rewrite通过php提供的phpinfo()函数查看环境配置,通过Ctrl+F查找到“Loaded Modules”,其中列出了所有apache2handler已经开启的模块,如果里面包括“mod_rewrite”,则已经支持,不再需要... -
使用纯php代码实现页面伪静态的方法
2020-12-18 13:44:31本文实例讲述了使用纯php代码实现页面伪静态的方法。分享给大家供大家参考。具体如下: if(1==URLROLE){ $nav=$_SERVER["REQUEST_URI"]; $script_name=$_SERVER["SCRIPT_NAME"]; $nav1=ereg_replace(".html","",... -
PHP 伪静态 网址参数中的【中文正则表达式】问题.rar
2021-09-16 22:03:19PHP 伪静态 网址参数中的【中文正则表达式】问题.rar -
PHP伪静态页面函数附使用方法
2020-10-30 09:49:14个PHP伪静态是另一个结合比较好的一个,比上一篇文章复杂点,建议大家结合上一 -
基于php伪静态的实现详细介绍
2020-10-27 10:52:56本篇文章介绍了,基于php伪静态的实现详细分析。需要的朋友参考下 -
宽屏响应式模板 英文外贸网站源码PHP伪静态html手机自适应带后台
2018-06-18 14:17:05宽屏响应式模板 英文外贸网站源码PHP伪静态html手机自适应带后台 -
php伪静态验证码不显示的解决方案
2020-10-16 07:30:26在本篇文章里小编给大家整理的是关于php伪静态验证码不显示怎么解决的相关知识点内容,以后需要的朋友们参考学习下。 -
PHP中的.htaccess伪静态文件
2020-09-10 03:39:32htaccess是apache的伪静态文件了不过普通人不熟悉linux不熟悉apache,可能都用惯了iis,可是又不懂伪静态规则,现在项目就只提供了这么一个.htaccess文件,真叫人苦恼。方案来了彻底解决你的苦恼让伪静态妥妥的... -
Discuz首页最后回复伪静态,redirect.php伪静态,最后发表伪静态
2020-09-28 18:07:07Discuz首页最后回复伪静态,redirect.php伪静态,最后发表伪静态效果,需要的朋友可以参考下 -
iis7 php伪静态如何设置
2021-03-23 20:54:20iis7 php伪静态设置的方法:首先下载IIS的URLRewrite;然后点击“Add Rules”并选择“Blank rule”;最后添加一个伪静态规则并确定保存即可。某个项目是PHP的,本地是Apache + PHP + MYSQL,服务器上的环境是IIS + ...iis7 php伪静态设置的方法:首先下载IIS的URLRewrite;然后点击“Add Rules”并选择“Blank rule”;最后添加一个伪静态规则并确定保存即可。
某个项目是PHP的,本地是Apache + PHP + MYSQL,服务器上的环境是IIS + PHP + MYSQL,开发完成准备部署到服务器上发现伪静态无法使用,原因是IIS不能解析.htaccess文件的内容。
如要在IIS下启用伪静态 就需要下载IIS的 URLRewrite,地址是: http://www.iis.net/expand/URLRewrite
点击那个 or view additional downloads 转到,服务器是64位的,所以我下载x64版本的URL Rewrite
双击下载完成的文件,下一步、下一步到安装完成
重新打开IIS发现多了个URL Rewrite项,打开全E文呀,不用怕其实配置还是很简单的……
如果我们要添加一个伪静态规则那么点击Add Rules,选择 Blank rule
我们只需要填写三个部分
name是这个规则的名称,可以随便取一个
Pattern是匹配规则
Action Properties是真实的地址
还有个Test pattern是用来测试匹配规则是否正确,例如我想测试一下^category/(.+)\.html$ 这个匹配设置,Test Results还很贴心的给出了匹配结果和我们需要的参数列表,其中 {R:1}就是我想要的参数,可以在 Rewrite URL中使用: cn/index.php?o={R:1} 是不是很简单~
顺便提一下:我在测试的时候不小心在正则表达式后面多加了个空格,结果总是匹配失败,所以大家要注意匹配规则的正则表达式前后不要带空格~
URLRewrite的规则和Apache中基本类似,例如在Apache中匹配规则是这样的:
RewriteEngine On
RewriteRule ^category/(.+)\.html$ cn/index.php?o=$1
RewriteRule ^substance/(.+)_(.+)\.html$ cn/index.php?o=$1&id=$2
那么在IIS中我们只需要将其中的 $1 $2替换成 {R:1}, {R:2} 就可以了
^category/(.+)\.html$ cn/index.php?o={R:1}
^substance/(.+)_(.+)\.html$ cn/index.php?o={R:1}&id={R:2}
熟悉了规则我们可以不用这个工具自己手工写URL匹配规则了,在网站根目录下修改web.config文件,system.webServer节点下增加rewrite项,修改内容为:
-
基于php伪静态的实现方法解析
2021-01-19 23:43:48在开发的过程中老早就听说了“伪静态”这一说。但是一直没有对其进行了解。 今天终于下定决定 要好好的了解下这方面的内容。 首先,什么是伪静态: 伪静态又名URL重写,是动态的网址看起来像静态的网址。换句话说... -
php伪静态化页面的实现_php和HTML做登录页面
2020-12-04 01:23:07PHP伪静态化页面的实现.txt成熟不是心变老而是眼泪在眼里打转却还保持微笑把一切平凡的事做好既不平凡把一切简单的事做对既不简单PHP伪静态化页面的实现 2009/11/17 19:31 方法一 一 打开 Apache 的配置文件 httpd.... -
宝塔设置php伪静态,Zblog在宝塔面板nginx环境下伪静态的配置教程
2021-04-21 11:55:31现在的宝塔面板比较流行,本文就为大家介绍下linux系统用的宝塔面板使用的nginx环境安装的zblogphp程序,伪静态的配置步骤。1、打开zblogphp后台--插件管理--打开静态管理中心插件,先设置好伪静态。这里把我自己的...现在的宝塔面板比较流行,本文就为大家介绍下linux系统用的宝塔面板使用的nginx环境安装的zblogphp程序,伪静态的配置步骤。
1、打开zblogphp后台--插件管理--打开静态管理中心插件,先设置好伪静态。
这里把我自己的为伪静态规则分享一下,有需要的直接拿走,首先打开插件,找到为伪静态中心,点击管理,静态化选项选择“伪静态”代码如下:文章的URL配置
{%host%}post/{%id%}.html
页面的URL配置
{%host%}{%alias%}/
首页的URL配置
{%host%}page_{%page%}.html
分类页的URL配置
{%host%}{%alias%}/{%page%}/
标签页的URL配置
{%host%}tags-{%id%}_{%page%}.html
日期页的URL配置
{%host%}date-{%date%}_{%page%}.html
作者页的URL配置
{%host%}author-{%id%}_{%page%}.html
直接把代码复制到文本框就OK了。
2、到了“ReWrite规则”这个界面的时候,复制框里面的所有代码:
3、打开你的宝塔面板管理界面,打开网站--找到你的网站--点击设置--点开伪静态,如下图:
将第2步里面获取到的代码粘贴到上图的红框里面,点击保存即可。
设置好以上几步,你的伪静态就配置完成了
-
紫斑马网站管理系统PHP伪静态版
2021-05-18 05:41:32摘要:PHP源码,CMS系统,网站管理系统 紫斑马网站管理系统,采用PHP+MYSQL架构,运行于PHP5以上环境,目前不支持生纯静态文件,是伪静态版本,内有伪静态规则。使用前请按照安装说明安装本系统。紫斑马网站管理系统首... -
伪静态URL中文乱码问题解决方法
2020-09-30 16:50:14ISAPI_Rewrite伪静态中文URL乱码的解决方案 细心有朋友会发现,在众多知名程序,比如ShopEx网店、Discuz论坛等系统的伪静态规则都存在中文编码问题 -
php伪静态实现方法
2012-05-13 11:38:29php伪静态实现方法,php伪静态,伪静态,php,MYSQL,MYSQL增删改查 -
laravel 去掉index.php伪静态的操作方法
2020-10-16 05:30:18今天小编就为大家分享一篇laravel 去掉index.php伪静态的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧