thinkphp5去除index.php的几大方式,根治各种不行
在tp5中官方给出的去隐藏index.php方法如下:
隐藏的index.php
PS:这里说的入口文件指的是公共/ index.php文件,配置文件就在这个目录下
可以去掉URL地址里面的入口文件index.php
,但是需要额外配置WEB服务器的重写规则。
以Apache
为例,在需要文件入口的同级添加.htaccess
文件(官方默认自带了该文件),内容如下:
<IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </IfModule>
如果用的phpstudy
,规则如下:
<IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] </IfModule>
如果index.php文件存放在public中
,规则如下:
<IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ public/index.php [L,E=PATH_INFO:$1] </IfModule>
接下来就可以使用下面的URL地址访问了
http://tp5.com/index/index/index http://tp5.com/index/index/hello
如果使用你的apache
版本使用上面的方式无法正常隐藏index.php
,尝试可以使用下面的方式配置.htaccess
文件:
<IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L] </IfModule>
如果的英文Nginx
环境的话教育,在可以Nginx.conf
中添加:
location / { // …..省略部分代码 if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=/$1 last; break; } }
======================================================================================================================================================================================
[ Apache ]
httpd.conf
配置文件中加载了mod_rewrite.so
模块AllowOverride None
将None
改为All
- 把下面的内容保存为
.htaccess
文件放到应用入口文件的同级目录下12345678<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
[ Nginx ]
在Nginx低版本中,是不支持PATHINFO的,但是可以通过在Nginx.conf
中配置转发规则实现:
1 2 3 4 5 | location / { // …..省略部分代码 if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=/$1 last; } } |
本人本地环境如下:phpstudy2018。官方给出的方法在一些集中的PHP环境中应该是可用的(本人没测过)。
今天本人配了一thinkadmin,折腾许久去不掉index.php。
改进方法有如下几种:
1、在index.php后面加个问号。如果从url地扯上理解,应该是问号后面算是参数(tp实现MVC原理就根据这个了),我写过dede二开,也是传不同参数调用不同方法。
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
2、用tp phpinfo兼容模式,即加了s
RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]
3、加上PHPINFO参数
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
————————————————
版权声明:本文为CSDN博主「陆平平」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011383596/article/details/80663471
另一博主文章:
在public文件夹下,有个.htacess文件,没有则新建一个, 如果已有这个文件,原文件内容如下:
<IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </IfModule>
如果此时还是报错 : “No input file specified.”;
那么就重写规则把最后一行
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
改为
RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]
即可!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库