当前位置:首页 > 焦点

php伪静态怎么设置

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好看,对性能没什么提升。真正的高并发站点反而会刻意避免重写规则,因为每次请求都要多一步正则匹配。小站点随便玩,大流量网站请三思。你的业务量级决定了要不要折腾这个,别为了好看把服务器拖累。

分享到: