PHP中的URL映射是什么?

19

我来自Java背景,对于任何基于servlet的技术,将一系列URL(例如/reports/,/secure/ .do)映射到指定的servlet是微不足道的。现在我对PHP不太熟悉,但我还没有看到任何使用PHP(或mod_php)完全执行相同操作的东西。很可能我错过了一些简单的东西。

你如何在PHP中做到这一点?

我想要这样做的原因之一是“一次性”URL。现在可以使用GET参数来实现这一点(如MD5哈希令牌),但我对URL映射作为许多问题的通用解决方案感兴趣。

另一个重要的原因是使用类似RESTful URLs这样的东西。

7个回答

23

13

除了使用mod_rewrite之外,你还可以通过一个简单的技巧来实现一些魔法。

在.htaccess文件中加入这样一条指令:

<FilesMatch "^servlet$"> 
  ForceType application/x-httpd-php
</FilesMatch> 

将^servlet$替换为您选择的正则表达式(它将是您调度程序的名称)

servlet文件应类似于此

<?php
  $data = explode('/',$HTTP_SERVER_VARS['PATH_INFO']); // $data[0] always empty
  $fileToInclude = $data[1].'.php';
  if (file_exists($data[1]) {
     $params=array_slice($data,2); // you can do here something more sophisticated
                                   // for example sanitize parameters or assemble 
                                   // an hash
     include ($fileToInclude);     //Think to this file as a servlet
  } else {
    // issue a 404 error, maybe one of the 500 series
  }
?>
该URL可以具有以下形式:http://yoursite/servlet/reports/sales/2009,也可以通过.htaccess和分发程序到达http://yoursite/reports/sales/2009。 这种方法的优点是不需要mod_rewrite,因为FilesMatch (1.3+) 和ForceType (2.0+) 在Apache核心中。参考资料请参见:
http://httpd.apache.org/docs/2.2/mod/core.html#forcetype
http://httpd.apache.org/docs/2.2/mod/core.html#filesmatch
http://www.devarticles.com/c/a/Apache/Using-ForceType-For-Nicer-Page-URLs/1/

12

我使用的方法是 $ _ SERVER ['PATH_INFO'] (我认为你需要使用Apache服务器)。这将为您提供在PHP文件扩展名之后的所有信息。

http://www.example.com/page.php/rest/url

$_SERVER['PATH_INFO']将包含:

"/rest/url"

页面可以基于该字符串进行重定向、处理某些代码或者其他操作。

如果您无法访问Apache配置文件或.htaccess文件,则此方法非常实用。另外,如果情况发生改变,您可以将page.php作为静态文件的目录名称。而且,PHP不需要使用.php扩展名,过去我曾使用.api或类似的扩展名。

http://www.example.com/worker.api/rest/url

这对我来说似乎运作良好。


2

这在PHP中无法做到。请注意,在Java中,映射URL的不是Servlets,而是servlet容器的配置(例如Tomcat)。

您可以通过使用URL重写来为PHP应用程序实现类似的结果。


2
这听起来通常需要使用mod_rewrite(作为Apache的一部分而非PHP)。我没有听说过PHP中有任何可以实现这一点的东西。

2

2

正如其他人所提到的,您可以使用mod_rewrite来实现此目的,但也可以使用前端控制器设计模式,这是许多Web框架使用的。请查看Horde routesZend_Controller_Router_Rewrite,可用于MVC。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接