2014-05-02 127 views
0

URL重写我试图让像下面转换路径查询字符串

http://domain/d1/d2/k1/val1/k2/val2/k3/val3 

的URL要

http://domain/index.php?one=d1&two=d2&k1=val1&k2=val2&k3=val3 

上面一个,两个是固定按键,路径的其余部分是键值对。 当我在/ d1/d2 /之后附加了更多键值对(超过三个)时,如何写出URL重写规则?

更新#1:

以下是我到目前为止。我无法在前两个文件夹末尾追加动态键值对。

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_URI} !\.(css|png|jpe?g|gif)$ [NC] 
RewriteCond %{REQUEST_URI} !index\.php [NC] 
RewriteRule ^([^/]+)/([^/]+) /index.php?one=$1&two=$2 [QSA,L] 

我想补充一个文件夹“查询”(见下文),以帮助为键值对的模式匹配,因为你知道后,查询所有的文件夹都有关键值对。但是,我不能走得更远。

http://domain/d1/d2/query/k1/val1/k2/val2/k3/val3 
+0

您到目前为止得到了什么? –

+0

请参阅我的更新。 –

回答

0

诀窍是遍历重写规则,直到目录中的所有元素都被替换。首先改变所有的键/值对,则D1和D2:

# Convert key/value pairs at end of line. Loop (N) until path is just two levels deep 
RewriteCond %{REQUEST_URI} ^/(\w+)/(\w+) 
RewriteRule (.+)/(\w+)/(\w+)$ $1?$2=$3 [QSA,N] 

# Replace two final paths to query string and append to /index.php 
RewriteCond %{REQUEST_URI} !^/index.php 
RewriteRule /(\w+)/(\w+) /index.php?one=$1&two=$2 [QSA] 
+0

我想我的问题是如何通过键值对循环到最后。 –

+0

如何处理k1 = val1&k2 = val2 –

+0

@PaulStewart,这是一个代码完整的例子。这演示了循环功能。评论告诉你,循环工作结束 - >开始。如果需要检查它是否正常工作,请启用rewriteLog。请记住,重写对最终用户是无声的。 –