Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的URL映射?_Php_Apache_Rest - Fatal编程技术网

PHP中的URL映射?

PHP中的URL映射?,php,apache,rest,Php,Apache,Rest,我来自Java背景,使用任何基于servlet的技术,将一系列URL(例如/reports/,/secure/.do)映射到指定的servlet都很简单。现在我对PHP不太熟悉,但我还没有看到任何与PHP(或mod_PHP)完全相同的东西。我完全有可能遗漏了一些简单的东西 如何在PHP中实现这一点 我想这样做的原因之一是“一次使用”URL。现在可以使用GET参数(比如MD5散列令牌)完成这项工作,但我对URL映射作为解决许多问题的通用解决方案感兴趣 使用这种东西的另一个重要原因是要有RESTfu

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

如何在PHP中实现这一点

我想这样做的原因之一是“一次使用”URL。现在可以使用GET参数(比如MD5散列令牌)完成这项工作,但我对URL映射作为解决许多问题的通用解决方案感兴趣


使用这种东西的另一个重要原因是要有RESTful URL。

不能在PHP中这样做。注意,在Java中,映射URL的也不是servlet,而是servlet容器(例如Tomcat)的配置


通过使用

可以为PHP应用程序获得类似的结果这听起来像是mod_rewrite通常用于的(作为Apache的一部分,而不是PHP)。我还没有听说PHP中有任何东西可以实现这一点。

使用Apache,您可以使用mod_rewrite为PHP页面设置URL重写,请检查以下资源:


除了使用mod_rewrite,正如已经报道的那样,您还可以通过一个简单的技巧来实现一些魔术

将这样的指令放入.htaccess

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

ForceType应用程序/x-httpd-php
用您选择的正则表达式替换^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
  }
?>

用于Apache以外的HTTP服务器的选项:

如果您使用的是Lighttpd,那么他们的mod_重写模块具有完全不同的配置语法。有关详细信息,请参阅


如果您使用的是IIS,那么您需要ISAPI_Rewrite()或URL Rewrite模块()。

正如其他人所提到的,您可以使用mod_Rewrite来实现这一点,但也可以使用前端控制器设计模式,这正是许多web框架所使用的。看看MVC可以使用什么,我使用的一个技巧是$服务器['PATH\u INFO'](我想你需要Apache)。这将获得PHP文件扩展名之后的所有信息

http://www.example.com/page.php/rest/url
$服务器['PATH\u INFO']将包含:

"/rest/url"
然后,页面可以重定向、处理一些代码或基于该字符串的任何内容

如果您没有访问Apache配置或.HTACCESS的权限,这是很好的,而且如果情况发生变化,您可以将page.php作为静态文件放置的目录名。噢,PHP不需要有.PHP扩展名。我以前用过.api之类的东西

http://www.example.com/worker.api/rest/url
这似乎对我很管用