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; }