在htaccess / php中传递动态变量

时间:2013-01-17 16:09:09

标签: php .htaccess

我创建的网站是动态的,信息(区域/类别/子类别)通过htaccess传递好网址。 例如,当用户潜入类别时,它按如下方式流动:

/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

希望这有意义!

感谢。

2 个答案:

答案 0 :(得分:13)

使用QSA标志传递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 = 2的请求   到/page.php?page=123&one=two。没有[QSA]标志,同样如此   请求将映射到/page.php?page=123-即现有的   查询字符串将被丢弃。

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

答案 1 :(得分:0)

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