我对 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
那么,我该如何组合这些规则,以便我可以有一个、两个或三个参数,并且任何“有用的词”都会被完全忽略?
答案1
根据您的示例,我假设这是 Apache 而不是 IIS。您应该真正了解正则表达式的工作原理,因为重写规则基本上就是找出正则表达式。
这些重写规则应该可以满足您的要求:
RewriteRule ^bike/([0-9]+)/ /index.cfm?Section=Bike&BikeID$1
RewriteRule ^bike/([0-9]+)/([0-9]+)/ /index.cfm?Section=Bike&BikeID=$1&FeatureID=$2
字符$
是行尾锚点,这意味着只有当输入字符串在该点结束时,表达式才会匹配。通过删除,$
我们删除了此要求,因此忽略了任何尾随字符。