使用Clean URL处理$ _GET请求

时间:2013-09-12 04:24:21

标签: php .htaccess clean-urls

我有一个清晰的基于URL的系统,所以类别将显示如下

http://www.mysite.com/category/23/cat-name

在类别页面中,我有一些排序和页面选项,例如按晚期排序和降低价格。另外,我有一个页面导航系统

问题是当请求发生在页面内时$_GET[]没有显示我需要的变量。但是它在URL中显示为

http://www.mysite.com/category/23/cat-name?page=3

$_GET变量仅显示我们现在为23的类别的ID,并忽略了网址中的网页编号。

.htaccess内容

RewriteEngine On
RewriteRule ^category/([0-9]+)/[a-z][-a-z0-9]*$ cat.php?id=$1

2 个答案:

答案 0 :(得分:2)

您需要在规则末尾添加QSA标记。这会将任何现有查询字符串附加到您在规则本身中构建的字符串:

RewriteEngine On
RewriteRule ^category/([0-9]+)/[a-z][-a-z0-9]*$ cat.php?id=$1 [L,QSA]

因此,重写的URI最终应为:/cat.php?id=23&page=3

答案 1 :(得分:2)

在重写规则的末尾添加QSA(查询字符串追加)。

RewriteEngine On
RewriteRule ^category/([0-9]+)/[a-z][-a-z0-9]*$ cat.php?id=$1 [L,QSA]

当替换URI包含查询字符串时,RewriteRule的默认行为是丢弃现有的查询字符串,并将其替换为新生成的查询字符串。使用[QSA]标志会导致组合查询字符串。

使用[QSA]标志,/ pages / 123?one = 2的请求将映射到/page.php?page=123&one=two。如果没有[QSA]标志,相同的请求将映射到/page.php?page=123-也就是说,现有的查询字符串将被丢弃。