thinkphp3.2实现伪静态需同时配置服务器url重写与框架路由——apache下须启用mod_rewrite、正确放置.htaccess并含pt标志,nginx下需在server块中配置rewrite或try_files;框架内必须设置url_router_on=true且url_model=2。

ThinkPHP3.2实现伪静态需同时完成服务器URL重写配置与框架内路由开启,缺一不可——只改.htaccess而没开路由,访问仍会404;只开路由不配服务器规则,index.php就无法隐藏。
Apache下配置.htaccess隐藏入口文件
这一步必须把文件放在与index.php同级的目录里,放错位置会导致全部请求被直接拒收。
方法一:标准PATH_INFO模式(推荐)
1、确认Apache已启用mod_rewrite模块,且对应目录AllowOverride设置为FileInfo Options(不能是None)。
2、在项目入口目录(即含index.php的目录)新建文件,命名为【.htaccess】(注意开头的英文点号,写成htaccess或.HtAccess均无效)。
3、写入以下内容:
Options +FollowSymlinks -Multiviews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
其中[QSA,PT,L]中的【PT】不可省略,否则$_SERVER['PATH_INFO']为空,框架无法解析路由。
方法二:兼容模式(适用于PATH_INFO支持不稳定环境)
把RewriteRule行改为:RewriteRule ^(.*)$ index.php?s=$1 [QSA,L],此时框架需配合设置'URL_MODEL'=>2。
框架内开启路由并设置URL模式
不执行这步,即使.htaccess生效,也会跳转到首页或报404。
第一步:打开项目配置文件Conf/config.php,找到或添加以下配置项:
'URL_ROUTER_ON' => true,
'URL_MODEL' => 2,
'URL_HTML_SUFFIX' => '.html',
'URL_DENY_SUFFIX' => 'php|html|htm|shtml'
第二步:确保URL_MODEL=2,这是ThinkPHP3.2中rewrite模式的标识值;设为1是pathinfo模式,设为0则退化为普通参数模式,都不满足伪静态要求。
第三步:若需自定义URL后缀(如用.xml或.pdf),可将URL_HTML_SUFFIX改为'xml|pdf',多个后缀用竖线分隔;设为空字符串''则允许任意后缀,但需自行用__EXT__常量判断处理逻辑。
Nginx下配置重写规则(无.htaccess支持)
Nginx不读取.htaccess,所有规则必须写进server块。若漏掉PHP处理块,会导致.php文件被直接下载而非执行。
方法一:使用if+rewrite(简单直接,适合新手)
1、编辑站点Nginx配置文件,在location / { }内插入:
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?s=$1 last;
}
2、确保下方存在PHP处理块:location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
方法二:用try_files替代if(更安全,推荐生产环境)
替换上述if块为:try_files $uri $uri/ /index.php?s=$uri&$args;,该写法避免了Nginx if指令的潜在陷阱,且无需额外判断文件是否存在。
若项目部署在子目录(如/example/),rewrite目标需改为/example/index.php?s=$1,并在location中声明location /example/ { ... }。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











