我试图从我的网址获取变量,但有问题。
默认URL为http://localhost/category.php?category_slug=gaming
用我的htaccsess文件
RewriteRule ^category/([\w\d-]+)$ /category.php?category_slug=$1 [L]
RewriteCond %{QUERY_STRING} category_slug=([\w\d-]+)
RewriteRule ^category$ %1 [R,L]
我得到了我想要的URL http://localhost/category/gaming
但现在我需要从url http://localhost/category/gaming?page=2
获取页面变量
在分类. php中我有$page=$_GET['page']
;
但是当我把它反射出来的时候我得到Warning: Undefined array key "page" in F:\Server\htdocs\category.php on line 5
最接近的方法是使用以下代码
RewriteRule ^category/([\w\d-]+)$ /category.php?category_slug=$1&page=$2 [L]
RewriteCond %{QUERY_STRING} category_slug=([\w\d-]+)
RewriteRule ^category$ %1 [R,L]
我没有收到任何错误,但数据未显示
所需的URL为http://localhost/category/gaming?page=2
或http://localhost/category/gaming/page2/
我很肯定我缺乏编辑我的htaccsess文件的知识是罪魁祸首。我需要有人给我指出正确的方向
1条答案
按热度按时间y4ekin9u1#
您需要将
QSA
(查询字符串附加)标志添加到重写请求的第一个规则中。这会将请求中的查询字符串(即page=2
)与要包含在 * substitution * 字符串(即category_slug
)中的查询字符串附加/合并,否则 * substitution * 中的查询字符串将替换请求中的查询字符串。(If,但是,如果您在 * substitution * 字符串中 * 不 * 包含查询字符串,则默认情况下会传递请求中的原始查询字符串-在这种情况下不需要
QSA
标志。)次要的一点是,
\w
速记类已经包含了数字,所以\d
是多余的。还应确保禁用"多视图",否则所有查询字符串参数都将丢失。
例如:
这样就可以处理
/category/gaming
和/category/gaming?page=2
。您的第二个规则实际上没有执行任何操作,除非它与其他内容相关。如果它执行任何操作,这可能会导致格式错误的重定向?
此规则会将
/category?category_slug=gaming
的URL重定向到gaming
(仅限)-这取决于您是否定义了RewriteBase
。