ThinkPHP框架里隐藏index.php
本文所写的配置在ThinkPHP3.2.2上测试过。按理也兼容其它版本。
首先修改配置文件:
'URL_CASE_INSENSITIVE'=>true,//默认false表示URL区分大小写true则表示不区分大小写
'URL_MODEL'=>2,//URL访问模式,可选参数0、1、2、3,代表以下四种模式:
//0(普通模式);1(PATHINFO模式);2(REWRITE模式);3(兼容模式)默认为PATHINFO模式
Nginx
推荐:
location/{
try_files$uri$uri//index.php?s=$uri&$args;
}
意思是:如果第一个$uri不存在,就访问$uri/;如果$uri/还不存在,访问/index.php?s=$uri&$args。可以后面跟很多个。
try_files 语法:try_filesfile1[file2...filen]fallback 默认值:无 作用域:location
再例如:
try_files$uri=404
什么意思呢?uri不能成功访问,那好,那就给你个404吧。
但是在网上找到的文章大部分是这样配置的:
location/{
if(!-e$request_filename){
rewrite^/(.*)$/index.php?/$1last;
break;
}
}
实际上不可行。
Apache
在根目录新建.htaccess文件:
<IfModulemod_rewrite.c>
Options+FollowSymlinks
RewriteEngineOn
RewriteCond%{REQUEST_FILENAME}!-d
RewriteCond%{REQUEST_FILENAME}!-f
RewriteRule^(.*)$index.php/$1[QSA,PT,L]
</IfModule>
IIS环境
如果你的服务器环境支持ISAPI_Rewrite的话,可以配置httpd.ini文件,添加下面的内容:
RewriteRule(.*)$/index\.php\?s=$1[I]
在IIS的高版本下面可以配置web.Config,在中间添加rewrite节点:
<rewrite>
<rules>
<rulename="OrgPage"stopProcessing="true">
<matchurl="^(.*)$"/>
<conditionslogicalGrouping="MatchAll">
<addinput="{HTTP_HOST}"pattern="^(.*)$"/>
<addinput="{REQUEST_FILENAME}"matchType="IsFile"negate="true"/>
<addinput="{REQUEST_FILENAME}”matchType="IsDirectory"negate="true"/>
</conditions>
<actiontype="Rewrite"url="index.php/{R:1}"/>
</rule>
</rules>
</rewrite>
附录
Nginx完整配置文
test.com.conf
server
{
listen80;
server_nametest.com;
indexindex.phpindex.html;
root/wwwroot/test.com/;
#unlesstherequestisforavalidfile(image,js,css,etc.),sendtobootstrap
location/{
try_files$uri$uri//index.php?s=$uri&$args;
}
location~\.php
{
fastcgi_pass127.0.0.1:9000;
fastcgi_indexindex.php;
#fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name;
#fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;
includefastcgi_params;
set$path_info"";
set$real_script_name$fastcgi_script_name;
if($fastcgi_script_name~"^(.+?\.php)(/.+)$"){
set$real_script_name$1;
set$path_info$2;
}
fastcgi_paramSCRIPT_FILENAME$document_root$real_script_name;
fastcgi_paramSCRIPT_NAME$real_script_name;
fastcgi_paramPATH_INFO$path_info;
}
location/status{
stub_statuson;
access_logoff;
}
location~.*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires24h;
}
location~.*\.(js|css)?$
{
expires12h;
}
if($fastcgi_script_name~\..*\/.*php){
return403;
}
access_loglogs/test.com_access.logmain;
error_loglogs/test.com_error.lognotice;
}