RewriteRule友好URL适配分页问题求助
解决RewriteRule分页参数无法获取的问题
你的原有规则能正确处理无分页的友好URL,但处理带page参数的URL时出错,核心问题是对RewriteCond和RewriteRule的匹配范围理解有误,以下是修正方案:
错误分析
- %{QUERY_STRING}范围误用:
%{QUERY_STRING}仅包含URL中?之后的内容,比如/homepage/gite-di-1-giorno?page=2的QUERY_STRING是page=2,而非你写的包含路径的homepage/([^/]+)$&page=([0-9]+)。 - RewriteRule匹配范围错误:RewriteRule的匹配模式只针对
?之前的路径部分,你写的^homepage/([^/]+)$&page=([0-9]+)包含了查询字符串,完全不符合匹配规则。
修正方案
方法一:使用QSA标志(推荐,最简单)
直接修改原有规则,添加QSA(Query String Append)标志,它会自动将原URL的查询字符串追加到目标URL的查询参数中:
RewriteRule ^homepage/([^/]+)$ /home.php?path=$1 [L,QSA]
这样访问/homepage/gite-di-1-giorno?page=2时,会自动映射为/home.php?path=gite-di-1-giorno&page=2,$_GET["page"]就能正常获取值。QSA还支持多参数场景,比如?page=2&sort=desc也能正确传递。
方法二:单独匹配page参数(严格校验场景)
如果需要强制page参数为数字,可以添加RewriteCond做校验:
# 处理带数字page参数的请求 RewriteCond %{QUERY_STRING} ^page=([0-9]+)$ RewriteRule ^homepage/([^/]+)$ /home.php?path=$1&page=%1 [L] # 处理不带参数的请求 RewriteRule ^homepage/([^/]+)$ /home.php?path=$1 [L]
注意这里用%1引用RewriteCond中捕获的分组,$1引用RewriteRule中捕获的路径分组。
内容的提问来源于stack exchange,提问作者Marco Burlando
相关产品推荐
相关产品推荐

