我想改写这样的:重写所有的网址
http//www.example.com/index.php?var1=val1&var2=val2&var3=val3
进入
http://www.example.com/var1/val1/var2/val2/var3/val3/
我正在寻找一个解决方案,对变量的任意数量的工作。可以做到吗?
我想改写这样的:重写所有的网址
http//www.example.com/index.php?var1=val1&var2=val2&var3=val3
进入
http://www.example.com/var1/val1/var2/val2/var3/val3/
我正在寻找一个解决方案,对变量的任意数量的工作。可以做到吗?
看看这个问题:Can mod_rewrite convert any number of parameters with any names?
My answer可以在你的情况下被使用过:
$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$segments = explode('/', trim($_SERVER['REQUEST_URI_PATH'], '/'));
for ($i=0, $n=count($segments); $i<$n; $i+=2) {
$_GET[rawurldecode($segments[$i])] = ($i+1 < $length) ? rawurldecode($segments[$i+1]) : null;
}
以及相应的规则是:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule^index.php [L]
这条规则重写任何无法将映射到现有文件或目录的请求发送到index.php
。
这与要求的相反。它将“/ a/b/c/d”变成“/index.php?a=b&c=d”。提问将“/index.php?a=b&c=d”转换为“/ a/b/c/d”。 – Glomek 2009-05-21 14:54:53
是的。诀窍是编写一个RewriteRule,用斜线替换一个字符(等号或和号),然后使用“下一个”标志重新启动重写过程。
下面可能是一个良好的开端:
RewriteRule ^/index.php - [chain]
RewriteRule ^(.*)[=&](.*)$ $1/$2 [next]
RewriteRule ^/index.php\? "/"
如果我得到这个权利,第一条规则将做什么,但前提是路径与“的index.php”开始匹配。 “链”选项意味着除非第一条规则匹配,否则第二条规则将不会运行。第二条规则会尝试用/替换=或&,如果成功,它将重新启动整个重写过程。第三条规则只有在所有的=和&被替换后才会达到,将删除“/index.php?”在开始时。
正如你接受我的回答,我认为你应该编辑你的问题,并更改网址。因为我的解决方案将第二种形式的请求内部重写为第一种形式。 – Gumbo 2009-05-21 14:54:10