插件窝 干货文章 ThinkPHP6如何隐藏URL中的默认模块名?

ThinkPHP6如何隐藏URL中的默认模块名?

模块 index 路由 规则 640    来源:    2025-03-16

在ThinkPHP6中,默认的模块名是index,URL中通常会显示这个模块名。如果你希望隐藏URL中的默认模块名,可以通过以下步骤实现:

1. 修改路由配置

首先,你需要在config/app.php文件中修改默认模块的配置。找到default_app配置项,将其设置为空字符串:

'default_app' => '',

2. 修改路由规则

接下来,你需要在config/route.php文件中定义路由规则,以便隐藏默认模块名。你可以使用路由分组来实现这一点。

例如,假设你有一个index模块,你可以在route/route.php文件中定义如下路由规则:

use think\facade\Route;

// 隐藏index模块名
Route::group('', function () {
    // 定义首页路由
    Route::get('/', 'index/index/index');

    // 定义其他路由
    Route::get('about', 'index/index/about');
    Route::get('contact', 'index/index/contact');
});

3. 修改URL生成方式

如果你在代码中使用url()函数生成URL,确保生成的URL不包含默认模块名。例如:

// 生成URL时不需要指定模块名
url('index/index/index'); // 生成 /
url('index/index/about'); // 生成 /about

4. 配置伪静态规则(可选)

如果你使用的是Apache服务器,可以在.htaccess文件中添加伪静态规则,以确保URL重写正常工作:

<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配置文件中添加如下规则:

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

5. 测试

完成上述配置后,访问你的应用,URL中将不再显示默认模块名index。例如:

  • 原来的URL:http://example.com/index/index/index
  • 隐藏模块名后的URL:http://example.com/

注意事项

  • 如果你有多个模块,并且希望隐藏某个特定模块的模块名,可以通过类似的方式为每个模块定义路由规则。
  • 确保在定义路由规则时,不会与其他模块的路由冲突。

通过以上步骤,你可以成功隐藏ThinkPHP6中URL的默认模块名。