我刚刚继承了一个用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来使用它?
答案 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模式。无论如何,它可以用你自己的方式对待,概念保持不变。希望这样做。