TP5隐藏public和index.php

本文介绍如何在ThinkPHP5中通过调整index.php位置及配置.htaccess和nginx服务器文件实现URL美化,使得URL中不再显示index.php,并保持访问正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人理解:
将public下的index.php文件移动到主目录下和更改index的入口文件可以在URL去掉public

将public下的.htaccess文件复制到主目录下并更改配置是:当url地址访问不存在的文件或路径时,调用正则表达式进行替换自动补齐/index.php/。也就是说即使你加上index.php访问也不会出错。

一、Apache
1、public下的index.php入口文件和.htaccess配置文件移到TP5主目录下
在这里插入图片描述
2、修改index.php文件
在这里插入图片描述

https://www.kancloud.cn/manual/thinkphp5/125729
3、修改.htaccess文件

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

效果图:
在这里插入图片描述
二、nginx
1、将public下的index.php入口文件移动到主目录下
2、同Apache

3.1、将nginx的nginx.conf服务器配置文件加入以下代码

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

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

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

效果图:加不加index.php效果是一样的

在这里插入图片描述
在这里插入图片描述
参考:https://www.fujieace.com/thinkphp/pathinfo.html

### 正确配置修改 ThinkPHP 框架 `public/index.php` 入口文件的方法 #### 配置 Apache 的 `.htaccess` 文件 为了隐藏 `public/index.php` 并实现 URL 美化,需要正确配置 Apache 的 `.htaccess` 文件。此文件位于项目的 `public` 目录下,默认情况下已经存在一些基本的重写规则[^2]。 以下是典型的 `.htaccess` 文件内容及其作用: ```apache <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On # 如果请求的是实际存在的目录或文件,则直接返回 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f # 将所有其他请求转发到 index.php 进行处理 RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </IfModule> ``` 上述代码的作用如下: - **Options +FollowSymlinks**: 启用符号链接支持。 - **RewriteEngine On**: 开启 URL 重写功能。 - **RewriteCond %{REQUEST_FILENAME} !-d !-f**: 判断当前请求是否指向真实的文件或目录,如果是则不执行后续规则。 - **RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]**: 将所有未匹配真实资源的请求通过 `index.php` 转发并附加原始路径参数。 需要注意的是,如果服务器上未启用 `mod_rewrite` 模块或者 PHP-FPM 配置不当,可能会导致该规则失效。可以通过检查 Apache 错误日志来排查问题。 --- #### 修改 Nginx 配置 (适用于使用 Nginx 的场景) 对于使用 Nginx 的开发人员来说,`.htaccess` 不起作用,需手动调整 Nginx 配置文件以达到相同效果。以下是一个标准的 Nginx 配置示例: ```nginx server { listen 80; server_name localhost; root /path/to/project/public; # 设置项目 public 目录为根目录 index index.php; location / { try_files $uri $uri/ /index.php?$query_string; # 实现 URL 重写逻辑 } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } ``` 这段配置的关键在于 `try_files` 指令,它能够捕获不存在的实际文件并将请求交由 `index.php` 处理[^4]。 --- #### 解决入口文件报错问题 当尝试运行 ThinkPHP 应用时,有时会出现类似以下错误提示:“require(/www/wwwroot/test3.com/public/../vendor/autoload.php)”[^3]。此类问题是由于 PHP 函数被禁用引起的,通常涉及以下几个方面: 1. **检查 `php.ini` 中的禁用函数列表** 打开对应的 `php.ini` 文件,查找 `disable_functions` 行,并确认其中是否有影响正常加载的功能(如 `file_get_contents`, `exec` 或者 `proc_open`)。如果有,请移除相关内容后再重启 Web 服务。 2. **验证 Composer 安装状态** 确保已成功完成依赖包安装操作 (`composer install`),并且生成了完整的 `vendor/autoload.php` 文件。 3. **版本兼容性校验** 若使用的 PHP 版本较低可能引发冲突现象。建议升级至官方推荐的支持范围内的最新稳定版(PHP >= 7.1)。 --- #### 测试与调试技巧 在完成了以上更改之后,可以按照下面的方式测试新设置的效果: - 访问 http://yourdomain.com/index/index/index ,观察页面能否正常显示; - 查看浏览器开发者工具中的网络面板,确保最终解析后的地址确实省略掉了 `/public/index.php` 前缀部分。 若有任何异常情况发生,可查阅对应环境的日志记录定位原因所在。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值