考虑这条规则
RewriteRule ^/models/(.*)/(.*)$ /models?$1=$2 [NC,L]
这会将/models/application/lawnmower
重写为/models?appliction=lawnmower
很好,正是我想要的
现在考虑这个规则(最多有6个名称/值对)
RewriteRule ^/models/(.*)/(.*)/(.*)/(.*)$ /models?$1=$2&$3=$4 [NC,L]
这应该重写
/models/application/lawnmower/series/xp
到
/models?application=lawnmower&series=xp
但它确实创造了
/models?application/lawnmower=series&GX=
最后,我需要做的是获取/ models后面的每个值并将其解析为qs格式的名称/值对
任何想法
答案 0 :(得分:1)
通过更多信息,您可以使用任意数量的键值对来获取URL,并将它们转换为查询字符串以传递给您的脚本。如果我没记错的话,Gumbo回答了一个类似的问题,带有一种“循环”,允许类似的东西。
但是,正如我相信他当时指出的那样,我现在会向你指出,用mod_rewrite
这样做真的不是一个好主意。最好让mod_rewrite
重写您的脚本URL:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/models/.*$ /models [NC,L]
...然后解析原始REQUEST_URI
值以提取所需的信息。与mod_rewrite
相比,您选择的脚本语言是一个更适合此任务的工具。
就修改当前规则而言,我想也许你对服务器的请求有一个尾随斜杠?由于您的(.*)
分组可以匹配任何内容(或者没有内容),如果您有三个其他斜杠,它们将贪婪地使用第一个斜杠作为密钥名称的一部分。简单的解决方案是不匹配捕获组中的斜杠:
RewriteRule ^/models/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /models?$1=$2&$3=$4 [NC,L]
请注意,如果您尝试将此作为一系列六个单独的规则执行此操作,那么您将会耗尽后向引用,因为您可以获得的最多(您定义的)是9。