我之前看到过使用规则将URL上的目录转换为key = value请求查询。
我不知道如何做到这一点,所以我可以有多个这样的对。
例如:
http://www.example.com/mykey/myvalue/mykey2/myvalue2
将映射到:
http://www.example.com?mykey=myvalue&mykey2=myvalue2
感谢。
答案 0 :(得分:7)
使用此.htaccess代码对基于key/value
的URI进行基于递归的转换:
Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)(/.*)?$ $3?$1=$2 [N,QSA]
RewriteRule ^(/[^/]+|[^/]+/|/?)$ /index.php [L,QSA]
使用这些规则,http://localhost/n1/v1/n2/v2/n3/v3/n4/v4
的网址将被内部重定向到http://localhost/?n4=v4&n3=v3&n2=v2&n1=v1
,将每个由/分隔的网址段视为QUERY_STRING的名称 - 值对。但请记住,如果URI没有偶数个段,例如:http://localhost/n1/v1/n2/
那么它将被重定向到http://localhost/?n1=v1
,丢弃额外的n2。
答案 1 :(得分:0)
我见过这种类型模式的最常见用法是在Zend Framework中,但我相信这是通过Front Controller实现的,即PHP代码。我相信,无法通过mod_rewrite匹配未知数量的匹配。也就是说,如果你知道最多会说3对,你可以使用......
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?$1=$2 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ /index.php?$1=$2&$3=$4 [QSA,L]
RewriteRule ([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ /index.php?$1=$2&$3=$4&$5=$6 [QSA,L]
...但如果没有已知的最大值,则无法完成。
答案 2 :(得分:0)