也做多个查询字符串参数,怎么办你想看看?我从这开始,它使这个简单,然后在下面变得更加棘手。
http://www.example.com/page/article/single/articleid=8&anothervar=abc
试试这个规则:
RewriteRule ^([^=]+)/(.+)$ $1.htm?$2 [NC,L]
该处理的一个或多个查询字符串参数,但需要至少一个。这会查找任何没有=
的东西,最多只能是斜线,然后是其他所有内容。基本上,它使用=
作为路径与查询字符串部分的指示符;但实际上将其分割成斜线。 (数控是我的一个习惯,没有必要在这种情况下,但是当我离开它,我忘了在需要时)。
为了让查询字符串是可选的,因此它可以处理几乎
http://www.example.com/page/article/single
我发现最简单的两种规则,而不是试图混入到一个规则是:
RewriteRule ^([^=]+)$ $1.htm [NC,L]
RewriteRule ^([^=]+)/(.+)$ $1.htm?$2 [NC,L]
你可以做一些更漂亮,使用一切斜线包括多个查询字符串参数,就像这样:
http://www.example.com/page/article/single/articleid=8/anothervar=abc
这是一个有点毛茸茸的,但我想这样的作品(不能让他走了......)
的另一条规则处理与&符号代替斜线,然后做重写如上。这是更容易保持直线 - 也许有办法做到这一切在一次,但是这是棘手的足以让我:
RewriteRule ^([^=]+)$ $1.htm [NC,L]
RewriteRule ^([^=]+)/([^=]+=[^/]+)/([^=]+=.+)$ $1/$2&$3 [NC,LP]
RewriteRule ^/([^=]+)/(.+)$ /$1.htm?$2 [NC,L]
的第一条规则同上,但处理没有查询字符串的。这只是让它走开了。
第二条规则是一个循环LP
,这是我在示例中倾向于找到的一个循环,只要您有未知数量的替换。在这种情况下,它将用&符替换上一个querystring-slash,并循环直到只剩下一个(在第三个规则中将问号留下)。
它正在寻找这些articleid=8/anothervar=abc
中最后一个还剩两个参数。它取代了斜线与像articleid=8&anothervar=abc
在字的符号,它在寻找(并在括号中捕获):
(not-equalsign) slash (not-equalsign equalsign not-slash) slash (not-equalsign equalsign anything)
此排队为:
(not-equalsign) /page/article/single
slash /
(not-equalsign equalsign not-slash) articleid = 8
slash /
(not-equalsign equalsign anything) anothervar = abc
它取代了最后一个斜线用一个&符号,并在循环之后,将它变成上面的第一个草稿:http://www.example.com/page/article/single/articleid=8&anothervar=abc
。第三条规则如上所述处理。
注意:这些也假设你的所有网址都是这样的,因为它们会对所有的东西都贴上.htm。如果你还想允许显式/something/page.htm
,那么这些规则如果已经存在,就需要与.htm不匹配 - 类似的东西。或者,也许最初的规则是寻找.htm,并停止在那里重写。或者,也许只能为/页面路径执行此操作。
哇,谢谢。我已经有了一些使用第一和第二规则组合的工作,现在只需要对其执行一些测试。 –