首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP中的URL映射?

PHP中的URL映射?
EN

Stack Overflow用户
提问于 2008-12-28 01:02:26
回答 6查看 29.2K关注 0票数 19

我有Java背景,使用任何基于servlet的技术,将一系列URL(例如/report/、/secure/.do)映射到指定的servlet是很容易的。现在我不太熟悉PHP了,但是我还没有看到任何可以用PHP (或mod_php)做同样事情的东西。我完全有可能遗漏了一些简单的东西。

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

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

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

EN

回答 6

Stack Overflow用户

发布于 2008-12-28 02:19:32

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

将如下指令放入.htaccess中

代码语言:javascript
复制
<FilesMatch "^servlet$"> 
  ForceType application/x-httpd-php
</FilesMatch> 

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

文件servlet应与以下内容类似

代码语言:javascript
复制
<?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
  }
?>

http://yoursite/reports/sales/2009的形式可以是:http://yoursite/servlet/reports/sales/2009,你也可以用.htacces和dispatcher稍微调整一下url的形式。

这种方法的优点是不需要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/

票数 13
EN

Stack Overflow用户

发布于 2008-12-31 09:12:18

我使用的一个技巧是$_'PATH_INFO'服务器。这将获取PHP文件扩展名之后的所有信息。

代码语言:javascript
复制
http://www.example.com/page.php/rest/url

$_SERVER‘’PATH_INFO‘将包含:

代码语言:javascript
复制
"/rest/url"

然后页面可以重定向,处理一些代码或基于该字符串的任何东西。

如果您无法访问Apache Configs或.HTACCESS,这很好,而且如果情况发生变化,您可以将page.php设置为静态文件放置的目录名。哦,PHP不需要有一个.php扩展。我以前用过.api或类似的东西。

代码语言:javascript
复制
http://www.example.com/worker.api/rest/url

这对我来说似乎很有效。

票数 12
EN

Stack Overflow用户

发布于 2008-12-28 01:08:30

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

您可以使用URL rewriting.为PHP应用程序实现类似的结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/395650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档