我创建的网站是动态的,信息(区域/类别/子类别)通过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
希望这有意义!
感谢。
答案 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,会有一个明显的缺点,即当你对这种路由要求有很大的要求时,你要添加多少规则。