htaccsess重写后的PHP GET

gcuhipw9  于 2023-02-11  发布在  PHP
关注(0)|答案(1)|浏览(102)

我试图从我的网址获取变量,但有问题。
默认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=2http://localhost/category/gaming/page2/
我很肯定我缺乏编辑我的htaccsess文件的知识是罪魁祸首。我需要有人给我指出正确的方向

y4ekin9u

y4ekin9u1#

RewriteRule ^category/([\w\d-]+)$ /category.php?category_slug=$1 [L]

您需要将QSA(查询字符串附加)标志添加到重写请求的第一个规则中。这会将请求中的查询字符串(即page=2)与要包含在 * substitution * 字符串(即category_slug)中的查询字符串附加/合并,否则 * substitution * 中的查询字符串将替换请求中的查询字符串。
(If,但是,如果您在 * substitution * 字符串中 * 不 * 包含查询字符串,则默认情况下会传递请求中的原始查询字符串-在这种情况下不需要QSA标志。)
次要的一点是,\w速记类已经包含了数字,所以\d是多余的。
还应确保禁用"多视图",否则所有查询字符串参数都将丢失。
例如:

Options -MultiViews

RewriteRule ^category/([\w-]+)$ /category.php?category_slug=$1 [QSA,L]

这样就可以处理/category/gaming/category/gaming?page=2

  • 旁白 *
RewriteCond %{QUERY_STRING} category_slug=([\w\d-]+)
RewriteRule ^category$ %1 [R,L]

您的第二个规则实际上没有执行任何操作,除非它与其他内容相关。如果它执行任何操作,这可能会导致格式错误的重定向?
此规则会将/category?category_slug=gaming的URL重定向到gaming(仅限)-这取决于您是否定义了RewriteBase

相关问题