2010-02-12 78 views
0

我正在做一些URL重写,我可以完成我需要用以下的事情:Apache网址与n个参数重写

RewriteRule ^([^/]*)/([^/]*)$ index.php?arg1=$1&arg2=$2 [L,QSA] 
RewriteRule ^([^/]*)$ index.php?arg1=$1 [L,QSA] 

你得到什么,我想在这里做什么,我基本上要采取完整的网址并将其解析为单个参数。所以/ blah/test/asdf/hi会以arg1 = blah,arg2 = test等形式出现。

现在,如果我想将其扩展为4或5个参数,我想知道是否有更清晰的方法提出它而不是与外出?arg1 = $ 1 & arg2 = $ 2 & arg3 = $ 3等等我见过人们用编程的方式做这个(只需带斜线的整个字符串并在代码中解析它),但我很好奇,如果有一种方法可以用apache来完成。

回答

1

您可以使用PHP来做到这一点:

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); 

$pathSegments = array_map('rawurldecode', explode('/', substr($_SERVER['REQUEST_URI_PATH'], 1))); 

第一行是让刚刚从请求URL的URL路径。另一行将删除前导斜杠(substr),拆分为段(explode)并解码每个段(array_maprawrurldecode)。

现在你只需要到所有请求传递给你的的index.php

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule !^index\.php$ index.php [L] 

的附加条件将排除可以映射到现有文件的请求。

+0

感谢您演示我提到的编程方法。看起来就是这样,如果我想要这种灵活性,就必须这样做。 – 2010-02-15 15:50:46

+0

@epalla:是的,绝对。您的应用程序最清楚如何解释这些URL。所以它也应该做URL解释,而不是mod_rewrite。 – Gumbo 2010-02-15 16:40:05