伪静态就是在访问url时隐藏index.php
例:
https://domains.com/index.php/admins/login/login
变成:
https://domains.com/admins/login/login
===》使用Apache时 ============================
一、修改Apache配置文件
首先修改【httpd.conf】配置文件;然后去掉【#】,使rewrite模块生效,并将None改为All。
1、LoadModule rewrite_module modules/mod_rewrite.so 去掉前面#,使rewrite 模块生效,没有这一行就自己另起一行添加上去
2、将httpd.conf中所有AllowOverride None 将None改为 All
二、官网给的解决方案: 解决重写URL,省去index.php问题
tp6官网文档public目录中给的 .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>
正确的写法应该如下,官网给的最后一行配置错误
<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>
另一写法
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L] #直接在index.php后面加一个 ?
</IfModule>
把 public 目录 .htaccess 文件中的 index.php后面加个问号就可以了 ,
index.php? 就这样
===》使用Nginx时 ============================
项目根目录(public)下新建nginx.htaccess文件
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last; break;
}
}
或者使用完整一点的,推荐的写法
location ~* (runtime|application)/{
return 403;
}
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last; break;
}
}