在 DokuWiki 中,start
页面通常是每个命名空间下的默认页面。如果你希望在访问一个目录路径(比如 /wiki/namespace/
)时自动显示 namespace:start
页面,但 URL 中不出现 start
,这其实是 DokuWiki 默认就支持的行为,前提是链接是指向目录而不是具体页面。
一、确认你的配置支持“隐藏 start 页面”的行为
DokuWiki 默认会将指向 namespace:
(即 /doku.php?id=namespace
)的请求解析为 namespace:start
,这是它的标准行为。但这个行为也依赖以下几点:
✅ 步骤 1:确认 start
页面的配置
在 conf/dokuwiki.php
中,有这个配置项:
$conf['start'] = 'start'; // 默认首页页面名称
只要这个设置为 start
,DokuWiki 会将 namespace:
自动解析到 namespace:start
。
✅ 步骤 2:使用目录样式链接
- 链接写成
[[namespace:]]
而不是[[namespace:start]]
- 或在浏览器中访问
https://your-site/wiki/namespace/
(有时 URL 重写规则会影响)
这样,页面访问和链接都不会显示 start
,但实质上是打开 namespace:start
。
✅ 步骤 3:启用 URL 重写(可选但推荐)
为了让链接更优雅,建议开启 URL 重写。编辑 conf/local.php
或 conf/dokuwiki.php
:
$conf['userewrite'] = 1; // 1 = 内部重写, 2 = .htaccess(推荐)
然后你需要确保 .htaccess
存在,并启用了:
RewriteEngine on
RewriteBase /wiki/
RewriteRule ^_media/(.*) lib/exe/fetch.php?media=$1 [QSA,L]
RewriteRule ^_detail/(.*) lib/exe/detail.php?media=$1 [QSA,L]
RewriteRule ^_export/([^/]+)/(.*) doku.php?do=export_$1&id=$2 [QSA,L]
RewriteRule ^$ doku.php
RewriteRule (.*) doku.php?id=$1 [QSA,L]
启用 URL 重写后,你可以访问:
https://example.com/wiki/namespace/
DokuWiki 会自动加载:
namespace:start
但 URL 中没有 start
。
✅ 步骤 4:使用 start
页面作为默认子页面(非首页)
在多个命名空间中使用 start
作为默认页面时,使用命名空间本身作为链接目标即可。例如:
[[products:]] → 实际打开的是 [[products:start]]
[[docs:]] → 实际打开的是 [[docs:start]]
总结
操作 | 效果 |
---|---|
使用 start 作为默认页名 |
保持默认行为 |
链接使用 [[namespace:]] |
显示的是 namespace:start ,URL 无 start |
启用 URL 重写 | 更优雅的链接如 /wiki/namespace/ |
不用修改核心代码 | 使用配置即可完成 |
如需进一步实现“点击链接始终隐藏 start
”,你只需要在创建链接时省略 :start
即可,DokuWiki 会自动处理。是否需要我提供一个实际的链接示例或模板?
您说:
如果是 nginx 呢,该如何重写
ChatGPT 说:
在使用 Nginx 作为 DokuWiki 的 Web 服务器时,为了实现“隐藏 start
页面但仍能访问 namespace:start
”,你需要配置 URL 重写规则来模拟 Apache 的 .htaccess
行为。
以下是一个完整的 Nginx 配置示例,假设你的 DokuWiki 安装在 /var/www/dokuwiki
,URL 路径为 /wiki/
:
✅ Nginx 配置示例
server {
listen 80;
server_name your-domain.com;
root /var/www/dokuwiki;
index index.php;
location /wiki/ {
try_files $uri $uri/ @dokuwiki;
}
location @dokuwiki {
rewrite ^/wiki/_media/(.*) /lib/exe/fetch.php?media=$1 break;
rewrite ^/wiki/_detail/(.*) /lib/exe/detail.php?media=$1 break;
rewrite ^/wiki/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 break;
rewrite ^/wiki/(.*) /doku.php?id=$1&$args break;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 或你系统上的 PHP-FPM 套接字
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?|ttf|eot)$ {
expires 30d;
access_log off;
}
}
✅ 配置说明
路径 | 行为描述 |
---|---|
/wiki/ |
匹配 DokuWiki 路径 |
/wiki/namespace/ |
自动访问 namespace:start (隐藏 start) |
/wiki/namespace/page |
访问特定页面 |
_media/ , _detail/ |
正常加载媒体与详情视图 |
.php 文件 |
正常解析 PHP 页面(例如 doku.php) |
✅ 配合 DokuWiki 配置使用
确保 conf/local.php
中启用了 URL 重写:
$conf['userewrite'] = 1; // 或 2 均可,配合 nginx rewrite 生效
注意:即使使用 userewrite = 2
,只要你正确配置 Nginx,DokuWiki 不依赖 Apache 的 .htaccess
。
✅ 示例效果
链接地址 | 实际渲染页面 |
---|---|
/wiki/docs/ |
docs:start |
/wiki/docs/getting-started |
docs:getting-started |
如果你还希望让主页(即 /wiki/
)指向 start
页面,也可以加:
location = /wiki/ {
rewrite ^ /doku.php?id=start last;
}