php实现url伪静态化
url的静态化,我一般借助于apache,nginx,htaccess等,很少用php来实现url的静态化,用php来实现静态化比较麻烦,所以就个人而言是不推荐使用php来实现url静态化
一,url的静态化实现的原理
1,通过程序来把动态的url转换成静态的url,转换方法最好是统一的接口。把静态的url放到html中,这样我们通过页面看到的就是静态的url。
2,apache或者其他,加载rewrite模块,添加重写规则。这样当我们点页面中的静态url时,就可以转向正确的url了。虽然执行的还是php文件,但是浏览器的地址栏中显示出来的,还是静态的url。
如果用php来实现url静态化,也要保持地址栏里面也要静态的url,这个比较麻烦的,下面就这个来举个简单的例子。
二,把动态url转换成静态url
<?php //将url转换成静态url function url_rewrite($file, $params = array (), $html = "", $rewrite = true) { if ($rewrite) { //开发阶段是不要rewrite,所在开发的时候,把$rewrite = false $url = ($file == 'index') ? '' : '/' . $file; if (! empty ( $params ) && is_array ( $params )) { $url .= '/' . implode ( '/', array_slice($params, 0 , 2)); $param = array_slice($params, 2); foreach($param as $key => $value){ $url .= '/' . $key . '/' . urlencode ( $value ); } } if (! empty ( $html )) { $url .= '.' . $html; } } else { $url = ($file == 'index') ? '/' : '/' . $file; if (substr ( $url, - 4 ) != '.php' && $file != 'index') { $url .= '.php'; } if (! empty ( $params ) && is_array ( $params )) { $url .= '?' . http_build_query ( $params ); } } return $url; } echo url_rewrite ( 'test', array ('class' => "User", 'act' => 'check', 'name' => 'tank','page'=>5 ) );echo "<br/>"; //$rewrite = false的情况下,显示如下/test.php?class=User&act=check&name=tank echo url_rewrite ( 'test.php', array ('class' => "User", 'act' => 'check', 'name' => 'tank' ) );echo "<br/>"; //$rewrite = true的情况下,显示如下/test.php/User/check/tank echo url_rewrite ( 'test', array ('class' => "User", 'act' => 'check', 'name' => 'tank' ) );echo "<br/>"; //$rewrite = true的情况下,显示如下/test/User/check/tank echo url_rewrite ( 'test', array ('class' => "User", 'act' => 'check', 'name' => 'tank' ), 'html' );echo "<br/>"; //$rewrite = true的情况下,显示如下/test/User/check/tank.html ?> <a href="./test3<?php echo url_rewrite('test.php',array('class'=>"User",'act'=>'check','name'=>'tank'));?>">test</a>
?上面简单的写了一个方法,把动态url转换成静态的url,页面中会产生链接如下:
<a href="./test3/test.php/User/check/name/tank">test</a>?
到这儿如果直接点击的话,肯定会报404错误的,因为根不可能找到tank这个目录的。 难点也在这儿,所以我们要把找不到的目录和文件指定一个php文件。这个要利用到apache,nginx,或者htaccess等。
三,指定一个统一入口
RewriteCond %{REQUEST_FILENAME} !-f //找不到文件 RewriteCond %{REQUEST_FILENAME} !-d //打不到目录 RewriteRule . /test3/index.php [L]
?
不管你是以.htaccess的方式来实现,还是写在apache等的配置文件中,都是可以的。上面三句话是什么意思呢,如果找不到目录转到index.php文件,如果找不到文件,也转到index.php。
这样做了,当我们访问http://localhost/test3/test.php/User/check/tank时候,就会转到index.php 来,既然知道到那个php文件了,那就好办了。
以下内容都是以http://localhost/test3/test.php/User/check/tank这种重写的方式来操作的,其他方式也都差不多。
四,index.php文件,URL映射解析类http://hudeyong926.iteye.com/admin/blogs/1113971
<?php $filename = $_SERVER['REQUEST_URI']; //请求的url /**请求的url,"/test3/test.php/User/check/tank" * test.php 要去的php文件 * User 是class名 * check 是class中的方法名 * tank 是要传到check的参数*/ preg_match("/(\w+\.php)/",$filename,$match); //查找php文件名 $array = explode('/',$filename); //将静态url进行分割 $key = array_keys($array,$match[0]); //得到文件所对应的下标Array ( [0] => 2 ) $file_array = array_slice($array,0,$key[0]+1); //Array ( [0] => [1] => test3 [2] => test.php ) $param_array = array_slice($array,$key[0]+1); //Array ( [0] => User [1] => check [2] => tank ) $file_path = implode('/',$file_array); if($array[$key[0]] != "index.php"){ include_once($array[$key[0]]); //包函请求url中的php文件,在这里是test.php } if(class_exists($param_array[0])){ //判断一下test.php这个文件中有没有User这个class $obj = new $param_array[0]; if(method_exists($obj,$param_array[1])){ //判断一下User这个class中有有没有check这个方法 $obj->$param_array[1]($param_array[3]); //调用这个方法,结果是(我的名子叫tank) } } ?>
?五,test.php文件
<?php class User { public function check($name){ echo "我的名子叫".$name; } } ?>
到这儿,当我们访问http://localhost/test3/test.php/User/check/tank这个网址的时候,
结果如下:我的名子叫tank,并且地址栏还仍然保持着静态。
到这儿通过php,我们完成了一个简单的url的重写过程。其实还是借助了.htaccess,或者apache等,但是重写的规则没有在.htaccess,或者apache中。如果完全用php来实现url的静态化,个人感觉,不可能。

PHP函数介绍—get_headers():获取URL的响应头信息概述:在PHP开发中,我们经常需要获取网页或远程资源的响应头信息。PHP函数get_headers()能够方便地获取目标URL的响应头信息,并以数组形式返回。本文将介绍get_headers()函数的用法,以及提供一些相关的代码示例。get_headers()函数的用法:get_header

现在很多热爱游戏的windows用户都进入了Steam客户端,可以搜索、下载和玩任何好游戏。但是,许多用户的个人资料可能具有完全相同的名称,这使得查找个人资料或什至将Steam个人资料链接到其他第三方帐户或加入Steam论坛以共享内容变得困难。为配置文件分配了一个唯一的17位id,它保持不变,用户无法随时更改,而用户名或自定义URL可以更改。无论如何,一些用户并不知道他们的Steamid,这对于了解这一点非常重要。如果您也不知道如何找到您帐户的Steamid,请不要惊慌。在这篇文

使用url进行编码和解码编码和解码的类java.net.URLDecoder.decode(url,解码格式)解码器.解码方法。转化成普通字符串,URLEncoder.decode(url,编码格式)将普通字符串变成指定格式的字符串packagecom.zixue.springbootmybatis.test;importjava.io.UnsupportedEncodingException;importjava.net.URLDecoder;importjava.net.URLEncoder

Scrapy是一个功能强大的Python爬虫框架,可以用于从互联网上获取大量的数据。但是,在进行Scrapy开发时,经常会遇到重复URL的爬取问题,这会浪费大量的时间和资源,影响效率。本文将介绍一些Scrapy优化技巧,以减少重复URL的爬取,提高Scrapy爬虫的效率。一、使用start_urls和allowed_domains属性在Scrapy爬虫中,可

前言在某些情况下,服务的controller中前缀是一致的,例如所有URL的前缀都为/context-path/api/v1,需要为某些URL添加统一的前缀。能想到的处理办法为修改服务的context-path,在context-path中添加api/v1,这样修改全局的前缀能够解决上面的问题,但存在弊端,如果URL存在多个前缀,例如有些URL需要前缀为api/v2,就无法区分了,如果服务中的一些静态资源不想添加api/v1,也无法区分。下面通过自定义注解的方式实现某些URL前缀的统一添加。一、

标题:C#中使用Array.Sort函数对数组进行排序的示例正文:在C#中,数组是一种常用的数据结构,经常需要对数组进行排序操作。C#提供了Array类,其中有Sort方法可以方便地对数组进行排序。本文将演示如何使用C#中的Array.Sort函数对数组进行排序,并提供具体的代码示例。首先,我们需要了解一下Array.Sort函数的基本用法。Array.So

url跳转这里说的url跳转就是用户在访问一个url时将其跳转到另一个url上。常见的应用场景是让多个域名跳转到同一个url上,(例如让旧域名跳转到新域名上)将静态文件请求跳转到cdn上等根据用户设备跳转到不同站点(pc版,wap版)等。url跳转可以通过js在页面上设置的window.location实现也可以通过php设置header来实现当然也可以用nginx的rewrite功能实现nginxrewrite模块rewrite是nginx的静态重写模块基本用法是rewritepattenre

本文系统:centos6.5_x64三台主机:nginx主机,hostname:master.lansgg.comip:192.168.10.128apache主机,hostname:client1.lansgg.comip:192.168.10.129一、nginx地址重定向二、nginx反向代理1、地址重定向:是指当使用者浏览某个网址时,将他导向到另一个网址的技术。常用在把一串很长的网址,转成较短的网址。因为当要传播某网站时,常常因为网址太长,不好记忆;又有可能因为换了网路的免费网页空间,网


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器