0

我有一个清晰的基于 URL 的系统,因此类别将像这样显示

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

在类别页面内,我有一些排序和页面选项,例如按最新和较低价格排序。另外,我有一个页面导航系统

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

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

$_GET变量仅显示在我们的案例中的类别的 ID =23并忽略了 url 中的页码。

.htaccess内容

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

2 回答 2

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

于 2013-09-12T04:26:18.537 回答
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=two 的请求将被映射到 /page.php?page=123&one=two。如果没有 [QSA] 标志,相同的请求将被映射到 /page.php?page=123 - 也就是说,现有的查询字符串将被丢弃。

于 2013-09-12T04:28:17.740 回答