为什么我的tp项目网址后面的index.php无法消除

在项目的实际开发中,我发现访问除了主页的其他模块时,后面的url会变成/index.php/admin这种形式,请问该如何去掉,美化url显示?

总是在梦里

2017-10-08

1 个评论

  • lizhiwei 127 天前

    查看tp开发文档可以了解到,可以通过URL重写隐藏应用的入口文件index.php。

    如果你的项目是apache服务器

    1. httpd.conf配置文件中加载了mod_rewrite.so模块
    2. AllowOverride None 将None改为 All
    3. 把下面的内容保存为.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>
    

    如果是Nginx服务器

    [ Nginx ]

    在Nginx低版本中,是不支持PATHINFO的,但是可以通过在Nginx.conf中配置转发规则实现:

      location / { // …..省略部分代码
       if (!-e $request_filename) {
       rewrite  ^(.*)$  /index.php?s=/$1  last;
       break;
        }
     }
    

    其实内部是转发到了ThinkPHP提供的兼容URL,利用这种方式,可以解决其他不支持PATHINFO的WEB服务器环境。

    如果你的应用安装在二级目录,Nginx的伪静态方法设置如下,其中youdomain是所在的目录名称。

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

    原来的访问URL:

    http://serverName/index.php/模块/控制器/操作/[参数名/参数值...]
    

    设置后,我们可以采用下面的方式访问:

    http://serverName/模块/控制器/操作/[参数名/参数值...]
    

    如果你没有修改服务器的权限,可以在index.php入口文件做修改,这不是正确的做法,并且不一定成功,视服务器而定,只是在框架执行前补全$_SERVER['PATH_INFO']参数

    $_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI' ];
    

    希望能够解决你的问题,意思答案仅供参考