ThinkPHP框架里隐藏index.php


Posted in PHP onApril 12, 2016

本文所写的配置在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_files file1 [file2 ... filen] fallback 
默认值: 无 
作用域: location

再例如:

try_files $uri = 404

什么意思呢?uri不能成功访问,那好,那就给你个404吧。

但是在网上找到的文章大部分是这样配置的:

location / {
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?/$1 last;
break;
}
}

实际上不可行。

Apache

在根目录新建.htaccess文件:

<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
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>
<rule name="OrgPage" stopProcessing="true">
<match url="^(.*)$" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^(.*)$" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}” matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php/{R:1}" />
</rule>
</rules>
</rewrite>

附录

Nginx完整配置文

test.com.conf
server
{
listen 80;
server_name test.com;
index index.php index.html;
root /wwwroot/test.com/;
# unless the request is for a valid file (image, js, css, etc.), send to bootstrap
location / {
try_files $uri $uri/ /index.php?s=$uri&$args;
}
location ~ \.php
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_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_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
}
location /status {
stub_status on;
access_log off;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 24h;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
if ( $fastcgi_script_name ~ \..*\/.*php ) {
return 403;
}
access_log logs/test.com_access.log main;
error_log logs/test.com_error.log notice;
}
PHP 相关文章推荐
AJAX for PHP简单表数据查询实例
Jan 02 PHP
php使HTML标签自动补全闭合函数代码
Oct 04 PHP
浅析php中抽象类和接口的概念以及区别
Jun 27 PHP
php后台如何避免用户直接进入方法实例
Oct 15 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
Dec 20 PHP
php文字水印和php图片水印实现代码(二种加水印方法)
Dec 25 PHP
php实现MySQL数据库备份与还原类实例
Dec 09 PHP
PHP中Restful api 错误提示返回值实现思路
Apr 12 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
Nov 05 PHP
PHP实现添加购物车功能
Mar 06 PHP
[原创]php正则删除html代码中class样式属性的方法
May 24 PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 11 PHP
PHP 绘制网站登录首页图片验证码
Apr 12 #PHP
PHP中Restful api 错误提示返回值实现思路
Apr 12 #PHP
PHP给文字内容中的关键字进行套红处理
Apr 12 #PHP
PHP实现的通过参数生成MYSQL语句类完整实例
Apr 11 #PHP
PHP实现的浏览器检查类
Apr 11 #PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
Apr 11 #PHP
PHP模板引擎Smarty内建函数详解
Apr 11 #PHP
You might like
PHP面向对象编程快速入门
2006/10/09 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
PHP闭包(Closure)使用详解
2013/05/02 PHP
destoon数据库表说明汇总
2014/07/15 PHP
php基于mcrypt的加密解密实例
2014/10/27 PHP
PHP实现类似题库抽题效果
2018/08/16 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
Jquery 插件学习实例1 插件制作说明与tableUI优化
2010/04/02 Javascript
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
jquery中ready()函数执行的时机和window的load事件比较
2015/06/22 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
2015/11/02 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
Ajax使用原生态JS验证用户名是否存在
2020/05/26 Javascript
详解Vue生命周期的示例
2017/03/10 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
js+html5实现复制文字按钮
2017/07/15 Javascript
微信小程序使用wxParse解析html的方法教程
2018/07/06 Javascript
如何基于JS截获动态代码
2019/12/25 Javascript
javascript实现放大镜功能
2020/12/09 Javascript
下载给定网页上图片的方法
2014/02/18 Python
Python 列表(List)操作方法详解
2014/03/11 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
2017/06/12 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
python得到windows自启动列表的方法
2018/10/14 Python
python+opencv实现高斯平滑滤波
2020/07/21 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
python基础梳理(一)(推荐)
2019/04/06 Python
Python3与fastdfs分布式文件系统如何实现交互
2020/06/23 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
Champion官网:美国冠军运动服装
2017/01/25 全球购物
软件测试有哪些?什么是配置项?
2012/02/12 面试题
立志成才演讲稿
2014/09/04 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
MySQL分区表实现按月份归类
2021/11/01 MySQL
MongoDB数据库之添删改查
2022/04/26 MongoDB