TP5配置隐藏入口index.php文件

隐藏的index.php

PS:这里说的入口文件指的是公共/ index.php文件,配置文件就在这个目录下

可以去掉URL地址里面的入口文件index.php,但是需要额外配置WEB服务器的重写规则。

Apache为例,在需要文件入口的同级添加.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>

如果用的phpstudy,规则如下:

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

如果index.php文件存放在public中,规则如下:

<IfModule mod_rewrite.c> 
Options +FollowSymlinks -Multiviews 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ public/index.php [L,E=PATH_INFO:$1] 
</IfModule>

接下来就可以使用下面的URL地址访问了

http://tp5.com/index/index/index
http://tp5.com/index/index/hello

如果使用你的apache版本使用上面的方式无法正常隐藏index.php,尝试可以使用下面的方式配置.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.conf中添加:

location / { // …..省略部分代码
    if (!-e $request_filename) {
        rewrite  ^(.*)$  /index.php?s=/$1  last;
        break;
    }
}
### 正确配置和修改 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` 前缀部分。 若有任何异常情况发生,可查阅对应环境的日志记录定位原因所在。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值