如何重写这些url?

我是全新的URL重写。 我正在IIS 7.5上使用Apache重写模块(我认为)。 无论哪种方式,我都能够成功地重写,但在一些关键的事情上却遇到了麻烦。

我想这个漂亮的url重写到这个丑陋的url:

mydomain.com/bike/1234 (pretty) mydomain.com/index.cfm?Section=Bike&BikeID=1234 (ugly) 

这个规则很好用:

 RewriteRule ^bike/([0-9]+)$ /index.cfm?Section=Bike&BikeID$1 

问题#1

我希望能够添加一个描述并将其放到完全相同的位置,以便我的应用程序完全忽略有用的信息。

 mydomain.com/bike/1234/a-really-great-bike (pretty and useful) mydomain.com/index.cfm?Section=Bike&BikeID=1234 

问题#2

我需要能够添加第二个或第三个参数和价值的url,以获得额外的信息数据库,如下所示:

 mydomain.com/bike/1234/5678 mydomain.com/index.cfm?Section=Bike&BikeID=1234&FeatureID=5678 

这使用这个规则:

 RewriteRule ^bike/([0-9]+)/([0-9]+)$ /index.cfm?Section=Bike&BikeID=$1&FeatureID=$2 

再次,我需要添加一些额外的信息,如第一个例子:

 mydomain.com/bike/1234/5678/a-really-great-bike (pretty and useful) mydomain.com/index.cfm?Section=Bike&BikeID=1234&FeatureID=5678 

那么,怎样才能把这些规则结合起来,让我可以有一两个或三个参数,而任何“有用的词”都被完全忽略了?

我假设这是Apache而不是IIS,根据你的例子。 你应该真正学习正则expression式是如何工作的,因为重写规则基本上就是搞清楚正则expression式。

这些重写规则应该做你想要的:

 RewriteRule ^bike/([0-9]+)/ /index.cfm?Section=Bike&BikeID$1 RewriteRule ^bike/([0-9]+)/([0-9]+)/ /index.cfm?Section=Bike&BikeID=$1&FeatureID=$2 

$字符是行结束的锚,这意味着只有当inputstring在该点结束时,expression式才会匹配。 通过删除$我们删除这个要求,因此忽略任何结尾的字符。