如何获取无变量的干净分页链接?自定义DB表场景
解决自定义数据库表分页链接的URL美化问题
嘿,我来帮你搞定这个分页URL美化的事儿——因为你的数据来自自定义数据库表,所以得同时调整URL重写规则和分页链接生成代码这两部分,下面分两种目标格式给你详细说明:
方案一:改成 site.com/page/cp/2 格式
1. 配置URL重写规则(.htaccess)
在网站根目录的.htaccess文件里添加以下规则(如果是WordPress站点,记得把这段放在WordPress默认的重写规则之前):
RewriteEngine On # 匹配page/cp/数字的格式,内部转发到原带参数的URL RewriteRule ^page/cp/([0-9]+)/?$ page/?cp=$1 [L,QSA]
这个规则的作用是让服务器把用户看到的page/cp/2,悄悄转换成原来的page/?cp=2来处理,既保证后端能正确识别分页参数,又给用户展示友好的URL。
2. 修改分页链接的生成代码
你肯定有一段生成分页按钮链接的代码,原来大概是这样的:
// 旧写法:生成带查询参数的链接 $pagination_link = 'page/?cp=' . $current_page;
现在直接改成美化后的格式:
// 新写法:生成page/cp/数字的链接 $pagination_link = 'page/cp/' . $current_page;
这样前端输出的分页按钮就会指向site.com/page/cp/2啦。
3. 后端获取分页参数
不用担心参数获取的问题,重写规则已经把cp参数传递过去了,你原来的代码可以继续用:
// 获取当前页码,默认显示第一页 $current_page = isset($_GET['cp']) ? intval($_GET['cp']) : 1;
方案二:改成更简洁的 site.com/page/2 格式
如果觉得cp后缀有点多余,想更简洁的话,可以用这个方案:
1. 配置URL重写规则(.htaccess)
同样在.htaccess里添加规则:
RewriteEngine On # 匹配page/数字的格式,转发到原URL RewriteRule ^page/([0-9]+)/?$ page/?cp=$1 [L,QSA] # 确保访问page本身时默认加载第一页 RewriteRule ^page/?$ page/?cp=1 [L,QSA]
2. 修改分页链接生成代码
把链接生成逻辑调整一下,第一页可以直接指向page,不用带页码:
// 生成简洁版分页链接 if ($current_page == 1) { $pagination_link = 'page'; // 第一页直接用page路径 } else { $pagination_link = 'page/' . $current_page; }
3. 后端获取参数
和方案一完全一样,还是用$_GET['cp']获取页码,默认值设为1即可:
$current_page = isset($_GET['cp']) ? intval($_GET['cp']) : 1;
额外注意事项
- 如果你的服务器是Nginx(不是Apache),需要把Apache的重写规则转换成Nginx语法,比如方案二的Nginx规则:
location /page { if ($request_uri ~* "^/page/([0-9]+)/?$") { rewrite ^/page/([0-9]+)/?$ /page/?cp=$1 last; } if ($request_uri ~* "^/page/?$") { rewrite ^/page/?$ /page/?cp=1 last; } } - 测试前记得清空浏览器缓存,避免旧URL的缓存影响结果。
- 如果你的
page是具体的PHP文件(比如page.php),要把规则里的page改成page.php,比如RewriteRule ^page/cp/([0-9]+)/?$ page.php?cp=$1 [L,QSA],根据你的实际文件结构调整就行。
内容的提问来源于stack exchange,提问作者Jaswinder Singh
相关产品推荐
相关产品推荐

