原文链接1:https://blog.csdn.net/lw545034502/article/details/79374172/
原文链接2:https://www.cnblogs.com/chq3272991/p/5757673.html
1.Tp3.2.3中有几种路由模式
注:每种模式后面括号内的0,1,2,3代表TP中对应的编号
第一种:普 通 模式(0):www.tp.nn/index.php?m=Home&c=Index&a=index
缺点:URL地址中显示内容太多,不安全
第二种:pathinfo 模式(1):www.tp.nn/index.php/Home/Index/index 默认模式
优点:简化了URL地址
第三种:rewrite 模式(2):www.tp.nn/Home/Index/index 个人建议使用模式
优点:简短,隐秘 (目录中不显示index.php)
使用rewrite模式需要两步操作:
- apache中开启rewrite模块,修改配置文件
- 将源码包中的.htaccess文件复制到项目根目录
第四种:兼 容 模式(3):www.tp.nn/index.php?s=/Home/Index/index
一般不使用该模式,只有当某些古老主机不支持pathinfo和rewrite模式,或者Apache没有开启pathinfo时使用。
2.TP5中apache隐藏入口文件
官方介绍是这样的:http://www.kancloud.cn/thinkphp/thinkphp5_quickstart/145250
可以去掉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>
接下来就可以使用下面的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>
但是还是不行,查到这么一篇文章(http://bbs.php100.com/simple/?t300372.html): Apache Rewrite 拟静态配置 1、mod_rewrite 简介和配置 Rewirte主要的功能就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则 表达式规范。平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等 如一个普通访问地址为 */php100.php?id=2 可以转成: */PHP100_2.html 或转成: */PHP100_2/ Apache配置: 支持httpd.conf 配置和目录 .htaccess配置 启用rewrite # LoadModule rewrite_module modules/mod_rewrite.so 去除前面的 # LoadModule rewrite_module modules/mod_rewrite.so 启用.htaccess AllowOverride None 修改为: AllowOverride All 2、mod_rewrite 规则的使用 RewriteEngine on RewriteCond %{HTTP_HOST} !^www.php100.com [NC] RewriteRule ^/(.*) http://www.php100.com/ [L] 启动rewrite引擎 判断主机 跳转到 RewriteEngine on RewriteRule ^/test([0-9]*).html$ /test.php?id=$1 RewriteRule ^/new([0-9]*)/$ /new.php?id=$1 [R] 3、mod_rewrite 规则修正符 1) R 强制外部重定向 2) F 禁用URL,返回403HTTP状态码。 3) G 强制URL为GONE,返回410HTTP状态码。 4) P 强制使用代理转发。 5) L 表明当前规则是最后一条规则,停止分析以后规则的重写。 6) N 重新从第一条规则开始运行重写过程。 7) C 与下一条规则关联 如果规则匹配则正常处理,以下修正符无效 8) T=MIME-type(force MIME type) 强制MIME类型 9) NS 只用于不是内部子请求 10) NC 不区分大小写 11) QSA 追加请求字符串 12) NE 不在输出转义特殊字符 \%3d$1 等价于 =$1 ----------------------------------------------------------------------------- 也就是最后还要补充这么处理:
把 #LoadModule rewrite_module modules/mod_rewrite.so 前面的#去掉,
再把权限AllowOverride None都改为AllowOverride All ,重启apache