伪静态怎么设置 详细教程
伪静态这事儿,伪静说穿了就一句话:让动态网址看起来像静态文件。态设但真做起来,置详坑不少。细教我见过太多人照着网上的伪静教程抄,结果要么404,态设要么直接500,置详连后台都进不去。细教
拿最常见的伪静Apache服务器开刀。你得先确认服务器开了mod_rewrite模块。态设怎么确认?置详在网站根目录放个phpinfo文件,搜“mod_rewrite”,细教看到了就说明开着。伪静没看到?态设那就得去httpd.conf里把LoadModule rewrite_module那行的注释去掉,重启Apache。置详这一步卡住的话,后面全白搭。
模块没问题了,接下来是.htaccess文件。这文件名字开头有个点,Windows下创建容易出幺蛾子——你新建一个txt,重命名成.htaccess,系统可能给你变成.htaccess.txt。用编辑器另存为,文件名直接写.htaccess,编码选UTF-8无BOM,这细节能省你半天排查时间。
文件建好了,往里写规则。最基础的写法:
RewriteEngine On RewriteRule ^article-(\d+)\.html$ /article.php?id=$1 [L] 这规则的意思很直白:用户访问article-123.html,服务器偷偷转成article.php?id=123。用户看着是静态页面,实际跑的还是动态脚本。但别高兴太早——这规则有个致命伤:如果article.php本身带参数,比如article.php?id=123&page=2,你光写上面那条,page参数会直接丢失。
所以更稳的写法是加上QSA标志:
RewriteRule ^article-(\d+)-(\d+)\.html$ /article.php?id=$1&page=$2 [L,QSA] QSA的意思是把原有query string追加到替换后的URL后面。这细节,网上八成教程都不提,但实际项目里早晚得碰上。
Apache搞定了,换Nginx。Nginx不像Apache那样支持.htaccess,所有的规则都得写在server配置里。在location块里加:
location / { rewrite ^/article-(\d+)\.html$ /article.php?id=$1 last; } 注意那个last标志,它告诉Nginx这条规则匹配完就停止,继续走下一个location。你要是写成break,可能出现静态资源加载不出来——因为css和js请求也被这条规则拦了。
还有个容易踩的雷:伪静态规则和真实的静态文件冲突。假设你网站根目录真有个article-123.html文件,那伪静态规则永远不会生效,服务器直接返回那个真文件。排查的时候先确认有没有同名文件,别光盯着配置看。
至于IIS?说实话,IIS的URL Rewrite模块跟Apache语法不一样,但概念相通。你在web.config里写规则,用
最后说个实战经验。伪静态配好之后,务必测三个东西:一是带参数的多级页面,二是POST请求,三是后台管理地址。很多人配完前台正常,后台登录直接报404——因为后台地址也被伪静态规则劫持了。解决办法也简单,在规则前面加一条例外:
RewriteRule ^(admin|user)/ - [L] 这行的意思是:凡是访问admin或user开头的路径,直接跳过所有伪静态规则。别问我怎么知道的——我当年给客户配伪静态,把人家后台搞挂了三次,最后一次才想起来加这条。
伪静态的本质是“欺骗”用户和搜索引擎,但对服务器来说,每次请求还是得走PHP解析。如果流量大,伪静态反而增加CPU开销。所以别盲目追求“看着像静态”,真静态该用还是得用。伪静态适合那些URL需要可读性、又不想生成海量静态文件的场景——比如文章详情页、分类列表页。拿捏好这个度,你才算真会用了。