时间:2021-07-01 10:21:17 帮助过:4人阅读
http://forum.sunhb.me/index.php/admin
请问这是如何实现的,如何写代码?谢谢。
(初学者,请耐心回答,谢谢)
偶然发现php文件后还能跟路径。
例如:
http://forum.sunhb.me/index.php/admin
请问这是如何实现的,如何写代码?谢谢。
(初学者,请耐心回答,谢谢)
大多数用php
实现的应用, 都是单一入口, 即把所有对该应用的请求, 对转发到入口文件(index.php, app.php)等,
比如你现在的这个问题segmentfault
,你还可以这样来访问 https://segmentfault.com/index.php/q/1010000005985468
把所有请求都转发到单一入口, 有利于面向对象php框架的设计, 也有利于URL美化。 上面的那个URL肯定是不要index.php的好看多了吧
如nginx
的请求转发
location {
if (!-e $request_filename ){
rewrite ^/(.*) /app.php?$1 last;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}
}
以上nginx的配置就是把所有请求都转发到app.php
apache
的配置
Apache常用.htaccess
文件来重写URL
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
以上Apache配置吧所有请求转发到index.php
无论是那种方式, 目的都是为了隐藏应用的入口文件(index.php ...), 使你访问https://segmentfault.com/index.php/q/1010000005985468 和https://segmentfault.com/q/1010000005985468
都得到同样的效果, 对客户URL友好又不暴露自己的应用设计细节
WebServer的rewrite功能。
当然有个index.php不好看,应该是:
http://forum.sunhb.me/admin
这是PHP一个路由实现。在index.php中通过解析$_SERVER['REQUEST_URI']
来进行脚本执行。
像http://forum.sunhb.me/index.php/admin
可能会解析为http://forum.sunhb.me/index.php?controller=admin
这样就会读取admin模块的首页了
当然只这么做会在URL上显示index.php,不太美观,对SEO也不友好。通常会加上服务器的rewrite操作。
PS:初学者的话可以参考一下ThinkPHP的路由,有个大概的理解。当然也不要太依赖TP框架