PHP伪静态,静态说白了就是设置让网址看起来像静态页面。比如把
index.php?静态id=3变成news/3.html。这玩意儿到底图啥?设置一是好看,二是静态方便搜索引擎抓取,三是设置对用户来说更好记。别小看这点变化,静态一个带问号带参数的设置URL和一条干净的路径,给人的静态信任感完全两码事。先泼盆冷水。设置伪静态不是静态PHP单独能完成的事,它必须依赖Web服务器。设置Apache和Nginx的静态玩法不一样,你得先搞清楚自己服务器跑的设置是哪个。大部分虚拟主机用的静态是Apache,那就从它说起。
Apache下最常用的方式是修改
.htaccess文件。这个文件放你网站根目录,没有就自己建一个。里面写啥?核心就两行:RewriteEngine On RewriteRule ^news/(\d+)\.html$ index.php?id=$1 [L]第一行是开启重写引擎,第二行是规则。意思是当用户访问
news/123.html时,服务器内部悄悄把它转成index.php?id=123来处理。用户浏览器地址栏看到的还是那个漂亮的伪静态地址,但PHP收到的参数跟原来一模一样。就这么简单。但这里有个坑。你必须在
RewriteRule前面加上条件判断,否则会把真实存在的文件也拦下来。比如你有张图片叫logo.png,访问它时不该走伪静态规则。所以完整版应该这样:RewriteEngine On RewriteCond %{ REQUEST_FILENAME} !-f RewriteCond %{ REQUEST_FILENAME} !-d RewriteRule ^news/(\d+)\.html$ index.php?id=$1 [L]那两行
RewriteCond的意思是:如果请求的不是一个真实文件,也不是一个真实目录,才执行后面的重写。这能避免把静态资源搞坏。Nginx用户就另说了。它不支持
.htaccess,得改配置文件。找到server块,加一段:location / { rewrite ^/news/(\d+)\.html$ /index.php?id=$1 last; }重启Nginx就生效。Nginx的语法更简洁,但修改后必须重启服务,不像Apache那样改完即用。
光配服务器还不够。你程序里所有生成链接的地方也得跟着变。比如原来代码里写
<a href="index.php?id=3">标题</a>,现在要改成<a href="news/3.html">标题</a>。不然用户点进去还是带着问号的动态地址,伪静态就白搭了。我见过不少人只改了服务器配置,程序里的链接一个没动。结果呢?页面能打开,但地址栏全是动态参数,搜索引擎收录的还是那堆乱七八糟的URL。伪静态的核心是“内外一致”——服务器要能解析,页面输出也要用新格式。
有个笨办法可以快速检查配置是否生效。随便写个PHP文件,里面就一行
<?php echo $_GET['id']; ?>,然后手动访问news/88.html。如果页面上输出“88”,说明重写成功了。如果报404,要么规则写错,要么服务器没开启mod_rewrite模块。最后提醒一句。伪静态只是让URL好看,对性能没什么提升。真正的高并发站点反而会刻意避免重写规则,因为每次请求都要多一步正则匹配。小站点随便玩,大流量网站请三思。你的业务量级决定了要不要折腾这个,别为了好看把服务器拖累。
顶: 59踩: 25






评论专区