【问题标题】:Handle $_GET requests with Clean URLs使用 Clean URL 处理 $_GET 请求
【发布时间】:2013-09-12 04:24:20
【问题描述】:

我有一个清晰的基于 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

【问题讨论】:

  • page=3 修复了吗?或者应该是id=23

标签: php .htaccess clean-urls


【解决方案1】:

您需要在规则末尾包含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

【讨论】:

    【解决方案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 - 也就是说,现有的查询字符串将被丢弃。

    【讨论】:

      猜你喜欢
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多