我有
形式的网址http://www.site.com/someCompany/someEmployee/name/someName/age/someAge/.../keyN/someValueN/
我正在尝试将它们转换为常规键=值形式,但无法弄明白。
你能帮我转换成
吗?http://www.site.com/someCompany/someEmployee?name=someName&age=someAge&...&keyN=someValueN/
基本上,可以有任意数量的键和值,并在URL中指定为/ key / value /
我阅读了很多示例和教程,但没有一个解释处理具有可变数量参数的URL。
提前致谢,
答案 0 :(得分:0)
确保已打开mod_rewrite。
在文档根目录中的htaccess文件中,添加这些文件(最好是您可能拥有的其他规则):
# Start converting query parameters to path
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+)/(.+?)\?[^\ ]+
RewriteCond %{QUERY_STRING} ^([^=]+)=([^&]+)&?(.*)$
RewriteRule ^([^/]+)/(.+)$ /$1/$2/%1/%2?%3 [L]
# done converting, redirect browser
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+)/(.+?)\?[^\ ]+
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^([^/]+)/(.+)$ /$1/$2 [R=301,L]
# internally rewrite paths to query strings
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)(.*) /$1/$2$5?$3=$4 [L,QSA]
# only someCompany/someEmployee left, pass it through
RewriteRule ^([^/]+)/([^/]+)/?$ /$1/$2 [L,R]
这看起来有点复杂。但前两个规则检查给定请求是否包含2个文件夹(例如/something/somethingelse
)和查询字符串(?
之后的所有内容),然后匹配名称/值对并将它们构造到URI中-路径。当查询字符串为空时,将浏览器重定向到新URL(不带查询字符串)。当有人将URL输入浏览器时,这就是这样:
http://www.site.com/someCompany/someEmployee?name=someName&age=someAge&keyN=someValueN
浏览器被重定向,因此地址栏中的URL如下所示:
http://www.site.com/someCompany/someEmployee/name/someName/age/someAge/keyN/someValueN/
然后第二组规则采用路径层次结构,保留前两个文件夹中的任何内容(例如/fooCompany/barEmployee
),并将每个2个文件夹更改为查询字符串中的名称/值对。基本上颠倒前两个规则的作用,但它不会重定向浏览器。它只会在内部重写URI。