Apache mod_rewrite路径名作为查询参数?

时间:2013-04-21 21:43:09

标签: apache mod-rewrite

我想使用Apache的mod_rewrite,以便能够将路径的每个文件夹作为特定的查询参数,例如考虑以下内容:

基本示例

网址要求:http://domain.com/shoes/prada/image-1/

已投放的网页:http://domain.com/?cid=shoes&bid=prada&pid=image-1

在这种情况下,请求了3个子文件夹(/shoes//prada/然后image-1),因此第一个子文件夹在实际页面中传递为{{ 1}},第二个为cid,第三个为bid

完整示例

但是,我还希望它根据所请求的子文件夹数量来提供特定页面,例如。

网址要求:pid

已投放的网页:http://domain.com/shoes/prada/

到目前为止,我设法找到的是基于正则表达式的http://domain.com/shop.php?cid=shoes&bid=prada匹配,但我的路径会有很大不同,这就是为什么我希望根据所访问的文件夹数量有条件(请注意,我对正则表达式不是那么好 - 我认为一个通配符会对此有所帮助,但我不确定从哪里开始。)

对此的任何帮助将不胜感激!这是非常长的,所以如果您需要更多信息澄清,请告诉我!

1 个答案:

答案 0 :(得分:7)

通过一些工作,我能够调整一些正则表达式并获得我想要的工作规则集:

RewriteEngine on
RewriteRule ^(.*)/(.*)/(.*)/(.)?$ product.php?tid=$1&sid=$2&eid=$3 [L]
RewriteRule ^(.*)/(.*)/(.)?$ brand.php?tid=$1&sid=$2 [L]
RewriteRule ^(.*)/(.)?$ shop.php?tid=$1 [L]

这与示例有点不同,但这是我首先想要的。

这允许重写最多四个文件夹的网址,每个文件夹的“名称”作为参数给出,每个额外的深度级别将网址重写为单独的资源,例如:

http://x.com/shoes/prada/2011-high-heels/ -> http://x.com/product.php?tid=shoes&sid=prada&eid=2011-high-heels

http://martinmelin.se/rewrite-rule-tester/

上进行测试