2009-10-27 75 views

回答

0

这实际上不是一个PHP5相关的问题 - URL重写是您的网络服务器的一部分。

你可以,当你在Apache上使用mod_rewrite(不知道IIS,但可能有类似的东西)。

1

不需要需要mod_rewrite来处理这样的场景。大多数流行的PHP框架目前都支持URI段解析。这是一个简单的例子,仍然有一些安全漏洞被修补。

你可以通过采取全球$ _ SERVER变量之一,并分割它向前处理这个斜杠,像这样:

if (!empty($_SERVER['REQUEST_URI'])) { 
    $segments = explode('/', $_SERVER['REQUEST_URI']); 
} 

$段变量现在将包含段的数组遍历。

+1

你仍然需要mod_rewrite将所有调用重定向到奇异的PHP脚本;) – 2009-10-27 23:41:25

+0

你需要mod_rewrite或其他一些机制将所有这些不同的请求映射到一个执行这种分割的php脚本(通常称为路由)。 – rojoca 2009-10-27 23:43:40

+0

@Kent,kudos。我为自己踢了一把。 – 2009-10-28 00:19:22

2

当然。如果开始是恒定的或者只有几个可能的值,则甚至不需要mod_rewrite。创建一个名为something(无扩展名)的php文件并告诉Apache(通过SetHandler或类似的指令)将其视为PHP。然后,在脚本中检查$_SERVER['PATH_INFO'],该脚本将看起来像a/few/directories/deep IIRC。不管你喜欢,你都可以用它来发送你的请求。

或者,正如Martin所说的那样,使用简单的mod_rewrite规则将其重写为/dispatch.php/something/a/few/directories/deep,然后在PATH_INFO中有完整的路径。

1

假设你使用的是Apache ...

添加重写规则(在你的虚拟主机的conf或刚落,在您的文档根.htaccess文件),指向一切的index.php。那么你的index.php的内部,解析请求URI和提取路径

RewriteEngine on 
RewriteRule ^.*$ index.php [L,QSA] 

的index.php:
$文件路径= $ _SERVER [ 'REQUEST_URI'];
$ filepath = ltrim($ myname,'/'); //如果你想要的话可​​以带上斜杠。

+0

这是关于你想要的mod_rewrite规则的最大数量。 – staticsan 2009-10-27 23:53:34