.htaccess重写后PHP无法获取GET参数page的问题排查
解决方案
1. 支持带查询参数的分页URL(如 http://localhost/category/gaming?page=2)
你的核心问题是原RewriteRule未保留原始查询字符串,导致?page=2被丢弃。只需添加QSA(Query String Append)标志,让重写时自动追加原查询参数到目标URL:
RewriteEngine On # 匹配无分页的分类URL,保留查询参数 RewriteRule ^category/([\w\d-]+)$ /category.php?category_slug=$1 [L,QSA]
配置后,访问http://localhost/category/gaming?page=2会被重写为category.php?category_slug=gaming&page=2,此时$_GET['page']就能正常获取到值。
2. 支持路径式分页URL(如 http://localhost/category/gaming/page2/)
如果需要这种更友好的路径格式,新增一条匹配分页路径的RewriteRule即可:
RewriteEngine On # 匹配带分页的分类URL RewriteRule ^category/([\w\d-]+)/page(\d+)/?$ /category.php?category_slug=$1&page=$2 [L,QSA] # 匹配无分页的分类URL RewriteRule ^category/([\w\d-]+)$ /category.php?category_slug=$1 [L,QSA]
- 正则
page(\d+)捕获分页数字,传递给page参数 /?允许URL末尾带或不带斜杠QSA同样保留其他可能的查询参数
额外建议
在PHP代码中给page设置默认值,避免未定义警告:
$page = $_GET['page'] ?? 1; // 如果page参数不存在,默认值为1
确保服务器已开启mod_rewrite功能,且根目录的.htaccess配置被允许(需在Apache配置中设置AllowOverride All)。
内容的提问来源于stack exchange,提问作者Nashie
相关产品推荐
相关产品推荐

