我习惯于像这样表示嵌入的 url 信息:
http://test.com/reports/statement.php?company=ABC&q=1
我该怎么做呢?
http://test.com/reports/ABC/Q1
你需要使用Apache mod_rewrite
来实现这一点。
如果您的服务器启用了它,您可以在以下位置执行以下操作.htaccess
:
RewriteEngine on
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ /statement.php?company=$1&q=$2 [L]
您可以使用 $_SERVER['PATH_INFO'] 访问 URL docpath中脚本地址之后的任何内容。
例如
http://test.com/reports/statement.php/ABC/Q1
...然后在 statement.php 中,您将在 $_SERVER['PATH_INFO'] 中拥有字符串“/ABC/Q1”
当然,您需要设置您的网络服务器以匹配 URL 并根据 HTTP 请求定位正确的脚本。
正如其他人所说,您必须使用 url 重写。
通常是一个使用它的 php 应用程序,它应用称为Front Controller的模式。
这意味着几乎每个 url 都被重写为指向一个文件,其中 $_SERVER['PATH_INFO'] 用于决定要做什么,通常通过匹配您为操作定义的模式,或者返回 404 错误,如果url 不匹配任何指定的模式。
这称为路由,每个现代 php 框架都有一个组件来帮助完成这项工作。
一个聪明的举措也是提供一个工具来为你的资源生成 url 而不是手写它们,这样如果你改变一个 url 模式,你就不必在任何地方重写它。
如果您需要复杂的路由系统,请查看一些主要框架的路由组件,例如 Symfony2、Zend Framework 2、Auraphp。
对于那里最简单的 php 路由器,请改为GluePHP。代码库很小,因此您可以自己了解这些东西的工作原理,甚至可以根据需要实现一个适合您需求的小型路由器。