8

我创建了一个动态站点,并且信息(区域/类别/子类别)通过 htaccess 传递以获取漂亮的 URL。例如,当用户潜入类别时,其流程如下:

/parts/hard-drives

/parts/hard-drives/hard-drives-sas

我想知道是否有一种方法可以从那时起在 htaccess 中扩展它,以便我可以传递更多项目并使用 php 获取变量,即:

/parts/hard-drives/hard-drives-sas/?manufacturer=dell&price=20

我当前的 htaccess 文件行如下:

RewriteRule ^parts/([^/\.]+)/([^/\.]+)/?$ parts.php?p=$1&f=$2 [L]
RewriteRule ^parts/([^/\.]+)/?$ parts.php?p=$1 [L]
RewriteRule ^parts parts.php [L]

您将看到第一行与/products/hard-drives/hard-drives-sas第二行相关/products/hard-drives,然后只是一个部件页面/parts

希望这是有道理的!

谢谢。

4

2 回答 2

14

使用QSAflag 传递 GET 变量:

RewriteRule ^parts/([^/\.]+)/([^/\.]+)/?$ parts.php?p=$1&f=$2 [L,QSA]
RewriteRule ^parts/([^/\.]+)/?$ parts.php?p=$1 [L,QSA]
RewriteRule ^parts parts.php [L,QSA]

文件:

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

考虑以下规则:

RewriteRule /pages/(.+) /page.php?page=$1 [QSA]

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

http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_qsa

于 2013-01-17T16:12:00.140 回答
0

我相信通过在服务器上编辑您的 .htaccess 来适应这个路由概念将是一个真正的痛苦。我建议你看看 CodeIgniter、CakePHP 等 PHP 框架。他们都已经准备好了你想要的路由机制。这很容易理解。通过编辑 .htaccess,会有一个明显的缺点,即当您对此类路由要求有大量需求时,您要添加多少规则。

于 2013-01-17T16:16:59.173 回答