如何理解PHP URL解析/路由?

时间:2011-03-18 11:23:13

标签: php iis web url-routing

我刚刚继承了一个用PHP构建的网站。 www.mysite.com 的主页在页面的某处有一个 href www.mysite.com/index/35.html 。在站点的根目录及其子目录中没有文档35.html。

数字35实际上是在DB中找到的id,它也保存页面的html内容。

如果我加载网址:www.mysite.com/index.php?id = 35,则会加载相同的网页。

PHP如何知道如何自动转换

  

/index/35.html

  

/index.php?id=35


修改 根据答案,我找到了一个.htaccess文件,其中包含可以解释功能的重写指令。

但是,IIS似乎并不(或未配置)知道如何使用它。 (可能是因为这是一个Apache功能?)

所以这引出了以下问题:有没有办法配置IIS来使用它?

4 个答案:

答案 0 :(得分:1)

没有。有一个mod_rewrite规则可以从/index/foo重写为/index.php?id=foo,可以在某个.htaccess文件中,也可以在httpd配置中重写。

答案 1 :(得分:1)

将使用.htaccess进行重写URL重写 - 应该在webroot中。

它可能看起来像:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]

可能有其他位,但这基本上告诉apache的是发送任何物理上不存在的东西到index.php

答案 2 :(得分:1)

RewriteEngine On
RewriteRule ^index/([\d]+)\.html /index.php?id=$1 [NC,L]

这是我的头脑。任何尝试加载以index /开头的地址的浏览器都有以.html结尾的任何数字在内部重定向到index.php?id =无论数字是什么。

编辑:刚看到你在IIS上工作。这可能不适合你。遗憾。

答案 3 :(得分:0)

我认为您将使用.htaccess将所有请求重定向到index.php。从那里您可以将查询字符串传递给路由类,该类将解析URL并标识唯一ID。 在这种情况下,我们可以这样说,您的路由类会将请求/index/35.html解析为indexController, indexAction, id=35。现在您可以将此ID传递给模型以获取相应的页面内容

注意:我假设您使用的是mvc模式。无论如何,它可以用你自己的方式对待,概念保持不变。希望这样做。