mod_rewrite用于1个已定义的和其他任意参数

时间:2015-10-21 09:06:46

标签: apache .htaccess mod-rewrite

我正在努力使用mod_rewrite。目前我有这个网址:

http://localhost/products.php?page=3&sort=r90&range=25-50

页面,排序和范围参数不是必需的。我喜欢的是以下工作网址:

第1页:

http://localhost/products - > http://localhost/products.php

第3页:

http://localhost/products/3/ - > http://localhost/products.php?page=3

对于带有n个参数的第5页:

http://localhost/products/5/?sort=r90&range=25-50 - > http://localhost/products.php?page=5&sort=r90&range=25-50

我目前有这条规则:

^products/([0-9]+)$ http://localhost/products.php?page=$1

正确适用于:

http://localhost/products/3/http://localhost/products/

然而,当我添加参数时,例如http://localhost/products/2/?sort=r90&range=25-50

重定向到http://localhost/products.php?sort=r90&range=25-50(没有页面参数)

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

使用QSA标志。将您当前的规则修改为:

RewriteRule ^products/([0-9]+)/?$ /products.php?page=$1 [NC,QSA,L]

来自Apache's docs on mod-rewrite

  

修改查询字符串

     

默认情况下,查询字符串不会更改。您可以,   但是,在包含查询的替换字符串中创建URL   字符串部分。只需在替换字符串中使用问号   表示应将以下文本重新注入   请求参数。如果要删除现有查询字符串,请结束   替换字符串只有一个问号。结合新旧   查询字符串,使用[QSA]标志。