2026 年 9 月,我在一台法国机器上把 free.fr 的免费空间从头到尾跑了一遍:注册子号、开空间、开数据库、上 HTTPS、装了 WordPress、Typecho 和一个图床。这篇就是那次折腾的记录。2024 年那版指南里的三个核心结论——只支持 PHP 5.6、推荐用 SQLite、FTP 地址是ftpperso.free.fr——放到今天已经全部过期了,下面会一条条纠正。
先说变了的几件事
| 项目 | 2024 年的情况 | 现在 |
|---|---|---|
| PHP | 只有 4.4.3 和 5.6.34,要手动开 php56 1 | 全平台升到 PHP 8.5,.htaccess 里写 PHP85 1 就是 8.5.10,想留在 5.6 也还能写 php56 1 |
| HTTPS | 没有 | 有了,地址是 https://你的登录名.pages-perso.free.fr,Let's Encrypt 证书由 Free 自动续期 |
| 数据库 | MySQL 5.7 | MySQL 5.7.44,新开的库往 MariaDB 11.8 迁移,另有 PostgreSQL 17 |
| 资源限制 | 上传 2M、内存 32M | PHP 8.5 下上传 10M、内存 128M,单次执行 30 秒 |
| FTP 地址 | ftpperso.free.fr | 那个地址现在连不上,必须用你的登录名.free.fr |
| 能装什么 | WordPress 最高 6.1,Typecho 用 2013 年的 0.9 | WordPress 7.1.1 和 Typecho 1.3.0 都跑通了 |
| 容量 | 10G / 3 万文件 | 没变,还是 10G 和 3 万文件 |
开始之前要准备什么
一台能出法国 IP 的机器。后台登录、FTP、数据库管理都看来源国,法国的机房 IP 就行,OVH、Scaleway、AWS 巴黎都能过,有 IPv6 也支持。这套空间只给 Free 的用户开,注册早就限制在法国境内了。
国内访问一直有问题,可以用自己的域名挂个 Cloudflare Worker 反代回来,脚本在最后一节。
先分清你手上是哪种账号
登录 subscribe.free.fr,看控制台长什么样:
- 同时有「GESTION DE VOS COMPTES MAILS」和「Gestion de vos pages perso」两块,还带一句 Créez vos comptes emails supplémentaires,这是有空间的主号,能建子号、能开空间、能开数据库。
- 只有邮件那一块,pages perso 那边空着,这种主号开不了空间,只能管邮箱。
- 只有一个关账号和改密码的界面,那是子号,得自己单独登录之后才能开自己的空间。
想知道某个号底下有几个子号,点控制台里的 Afficher vos coordonnées et vos comptes supplémentaires,那个页面会把主号邮箱和所有子号邮箱一次列出来,比翻邮件快。另外如果点改密码提示没有权限,说明这个主号被降级了,但空间本身还能照常用。
开空间和建子号
建子号在控制台首页点 Créez vos comptes emails supplémentaires,填个名字和两遍密码就行。名字只能用小写字母、数字和点,长度不超过 32,全球唯一,别人抢先注册了你就用不了。密码要 8 到 16 位,能用的字符是字母数字加上 # $ , ; . : * @ [ ] ( ) ? + = - _ %,注意带 $的密码会被系统直接拒掉。提交那一刻号就建好了,可用会提示两小时内生效,被占用会提示 existe déjà。这里没有只检查名字能不能用的接口,试一次要么建成要么被拒。
空间是单独开的,子号或主号登录控制台后点 Activer votre compte pour les pages personnelles,表单里选要不要数据库,勾上同意条款再提交。提交完会提示已经受理,接下来就是等,官方口径是几天,我这次等了十多个小时还没动静,有人说等过三天。
控制台的状态会一步步变,照着看就知道卡在哪:还显示 Activer votre compte pour les pages personnelles 说明还没提交;变成 Création de votre espace en cours... 说明已经在排队;等出现改 FTP 密码、销毁空间、看统计这些入口,才算真的能用。判断生效最直接的办法是看你的登录名.free.fr有没有 DNS 解析、FTP 能不能登进去。批量开号的话挂个每五分钟查一次的脚本,比手动刷新省事。
另外控制台上那条 Augmenter le quota à 10 Go 容易让人误会,它其实是架构迁移页,已经迁移过的账号点开只会告诉你已经在用新架构,跟配额没有关系。
空间里能跑什么
在该空间根目录放一个 .htaccess,写上下面的内容,就能用 PHP 8.5:
<IfDefine Free>
PHP85 1
</IfDefine>
探针跑出来是这样:PHP 8.5.10,mysqli、pdo_mysql、pdo_sqlite、gd、curl、mbstring、xml、zip、openssl、exif、iconv、sodium 都在,imagick 和 gmp 没有;上传限制 10M,内存 128M,执行时间 30 秒,禁用函数列表是空的。
有几个地方跟普通虚拟主机不一样,很容易踩:
- 不写 .htaccess 时默认落到很老的 PHP 4.4.3,短数组和 ?? 这种语法会直接报 Parse error。
- .user.ini 在这个平台上不生效,用 php_value 或 php_flag 写进 .htaccess 会整个站 500。
- 默认 display_errors 是开的,程序抛出的 warning 会直接印在页面上,还会把 header 搞坏,表现为 headers already sent。要么在程序入口先加 ini_set('display_errors','0'),要么就忍受页面被污染。
HTTPS 是今年才有的。证书是泛域名 *.pages-perso.free.fr,TLS 支持 1.3 和 1.2,你什么都不用申请。要注意站点其实有两个地址:http://你的登录名.free.fr 是老地址,没有 443 端口,仍然是明文 HTTP,新地址 https://你的登录名.pages-perso.free.fr 会自动把 HTTP 跳到HTTPS。登录名里带点的,新地址要把点换成连字符,比如 www.moe 对应 www-moe.pages-perso.free.fr。想让老地址也跳过去,在 .htaccess 里加这段:
<If "%{HTTPS} != 'on'">
RedirectMatch 301 ^/(.*)$ https://你的连字符登录名.pages-perso.free.fr/$1
</If>
自备证书和绑定自己的域名都做不到,HSTS 也加不了,因为 mod_headers 被禁用了。
数据库这块记三条就够:主机是 sql.free.fr,用户名就是你的登录名原样,密码默认跟账号密码一样,另外登录名里有点的,库名要把点换成下划线,www.moe 对应 www_moe。版本是 MySQL 5.7.44。它只允许空间里的 PHP 连,从外面直连会被拒。想开库就去控制台点 Activer votre base de données MySQL,提交后提示已受理,等 24 到 48 小时。等库的这段时间其实可以考虑直接用 SQLite,pdo_sqlite 和 sqlite3 都能用,省掉等待。
.htaccess 里哪些能用
这份清单是反复试出来的,因为写错了不是报错提示而是整站 500:
能用的有 IfDefine 里切 PHP 版本、ExpiresActive 和 ExpiresByType 做静态缓存、用 If "%{HTTPS} != 'on'" 配合 Redirect 或 RedirectMatch 做跳转、ErrorDocument、Options All -Indexes,以及 FilesMatch 加 Require 做目录限制。
不能用的:Header set 这类自定义响应头、RewriteEngine 伪静态、SetEnvIfNoCase 防盗链、php_value 和 php_flag、DirectoryIndex,还有 AddOutputFilterByType。加上 .user.ini 本身也不生效。
后果就是三件事:伪静态做不了,Typecho 和 WordPress 只能用 index.php 形式的链接;防盗链做不了,图床只能靠程序自己的水印;HSTS 加不了。还有一点,空间根目录默认那个 22.9K 的 index.html 占位页必须删掉,否则它会抢走首页,而 DirectoryIndex 又不能用。
日常用的模板可以直接抄这份:
<IfDefine Free>
PHP85 1
</IfDefine>
Options All -Indexes
ExpiresActive On
ExpiresByType text/css "access plus 30 days"
ExpiresByType application/javascript "access plus 30 days"
ExpiresByType image/png "access plus 30 days"
ExpiresByType image/jpeg "access plus 30 days"
ExpiresByType image/svg+xml "access plus 30 days"
ExpiresByType font/woff2 "access plus 365 days"
ErrorDocument 404 /index.php
<If "%{HTTPS} != 'on'">
RedirectMatch 301 ^/(.*)$ https://你的连字符登录名.pages-perso.free.fr/$1
</If>
FTP 怎么连
主机名写你的登录名.free.fr,端口 21,用户名就是登录名,密码就是账号密码,也可以在控制台单独改一个 FTP 密码。ftpperso.free.fr 这个老地址现在连不上,会直接断开。来源必须是法国 IP,机房 IP 也能过,住宅更稳。想查用量就在 FTP 里发 SITE QUOTA,会告诉你用了多少兆、多少个文件,上限就是 10240M 和 30000 个。
2024 年那篇推荐的 net2ftp 现在也还能用,不过既然后台 FTP 对法国机房 IP 放行,用 FileZilla 或者直接写脚本更方便。
传大包的办法
空间单次执行只有 30 秒,WordPress 那种四千多个文件的包直接解压会超时。我的做法是先用 FTP 传一个 zip 上去,再传一个会自动删除的 PHP 脚本,然后用 HTTP 分块调用它。
<?php
$tok = $_GET['t'] ?? ''; if ($tok !== '换成你自己的随机串') { http_response_code(403); exit; }
@set_time_limit(0);
$from = (int)($_GET['from'] ?? 0); $count = (int)($_GET['count'] ?? 800);
$strip = $_GET['strip'] ?? ''; // 压缩包顶层目录,比如 wordpress/
$z = new ZipArchive(); if ($z->open(__DIR__.'/_pkg.zip') !== TRUE) exit("OPENFAIL");
$n = $z->numFiles; $done = 0;
for ($i = $from; $i < min($n, $from + $count); $i++) {
$nm = $z->getNameIndex($i);
if ($strip !== '' && strpos($nm, $strip) === 0) $nm = substr($nm, strlen($strip));
if ($nm === '') continue;
$t = __DIR__ . '/' . $nm;
if (substr($nm, -1) === '/') { @mkdir($t, 0755, true); }
else { @mkdir(dirname($t), 0755, true); file_put_contents($t, $z->getFromIndex($i)); }
$done = $i + 1;
}
$z->close();
echo json_encode(["done" => $done, "total" => $n, "finished" => $done >= $n]);
if ($done >= $n) { @unlink(__DIR__.'/_pkg.zip'); @unlink(__FILE__); }
访问 https://你的连字符登录名.pages-perso.free.fr/zz.php?t=你的随机串&strip=wordpress/&from=0&count=800,每次返回进度,一直调到 finished 为 true 就完事,脚本和 zip 会自己删掉。WordPress 7.1.1 这个包有 4250 个条目、37M 的压缩包、解压后105M,六次调用二十四秒就解完了。
装什么程序
WordPress。 下载官方最新的包,用上面的脚本解压到根目录,删掉占位的 index.html,然后手写 wp-config.php。这里的重点是在文件最顶部先把 warning 关掉,不然 free.fr 默认的 display_errors 会让页面到处都是提示。数据库填sql.free.fr,用户名写登录名,库名把点换成下划线,密码就是账号密码。另外把站点地址固定成 https 那个新域名,FS_METHOD 设成 direct 方便后台直接写文件。装完有两个限制要知道:固定链接只能选朴素形式,会显示成 ?p=8 这样;要调 REST 接口必须走 /index.php?rest_route=/wp/v2/posts 这种写法,直接请求 /wp-json/ 会 404。上传受 10M 限制,主题和插件挑小一点的包。
装好的测试站可以直接点:https://www-moe.pages-perso.free.fr/
Typecho。 比 WordPress 轻得多,也更适合这个环境。安装时选 SQLite 就完全不用等数据库开通,安装器走到数据库那一步把适配器选成 Pdo_SQLite、文件名写 typecho.db 就行。有个坑要记住,Typecho 的登录令牌是放在表单 action 的查询串里的,用脚本登录必须打到那个带?_=令牌 的地址,否则会一直停在登录页而且不给任何提示。装完记得把 install.php 和 install 目录删掉。
测试站:https://coai.pages-perso.free.fr/
图床 EasyImage。 不需要数据库,装好就能用。但它有两处必须改,不然在这个平台上会出问题:一是在 app/function.php 和 app/header.php 顶部加一行关掉 display_errors;二是admin/index.php 里那句加载 header 的代码要挪到登录处理之后,否则设置 cookie的时候页面已经开始输出了,会出现登录成功却没登进去的怪事。后台密码框里要填密码的 SHA256 值,前端脚本会自动转。图片上传接口在 /app/upload.php,返回的删除链接是访问一次就删,别当验证链接点。
测试站:https://p88.pages-perso.free.fr/
用量和规矩
每个空间给 10G 空间和三万个文件,单文件上传 10M,内存 128M。这些空间只能放网站,不能当网盘或者备份盘用,空的、没有首页的目录长期放着会被判成未使用。如果只想先占着位置又不想放内容,社区的做法是根目录放个 index.html,再在 .htaccess 里写 Options+Indexes。另外不要短时间反复注册或者试密码,触发风控会影响整个账号。
绑定自己的域名
free.fr 不支持绑定自有域名,只能反代。现在源站有了 HTTPS,用 Cloudflare Worker 最简单:
export default {
async fetch(request) {
const url = new URL(request.url);
return fetch('https://你的连字符登录名.pages-perso.free.fr' + url.pathname + url.search, {
method: request.method, headers: request.headers, body: request.body,
});
}
};
记得指向 https 的新域名,不要再用 http 的老域名,否则既慢又有混合内容警告。
出问题先查这张表
| 现象 | 原因和处理 |
|---|---|
| 整站 500 | .htaccess 里写了被禁的指令,通常是 DirectoryIndex、Header、Rewrite 或 php_value |
| 页面里冒出 Warning 或者 headers already sent | 主机 display_errors 是开的,在程序入口加 ini_set('display_errors','0') |
| 首页一直是 Under Construction | 根目录的 index.html 没删 |
| 首页返回 403 | 空的、没有首页的空间,属于正常现象 |
| PHP 报 unexpected '[' | 没开 PHP 8.5,.htaccess 里缺 PHP85 1 |
| FTP 连不上或者直接断开 | 主机名写成了 ftpperso.free.fr,或者来源不是法国 IP |
| 请求 /wp-json/ 返回 404 | 这个平台没有伪静态,改成 /index.php?rest_route= 的写法 |
| 数据库连不上 | 空间还没生效,或者数据库没开通,或者库名没有把点换成下划线 |
| 控制台一直是 Création de votre espace en cours... | 在排队,等就行,不是出错 |
| 登录提示成功但页面又回到登录页 | 程序在输出之后才设置 cookie,或者登录令牌放在表单 action 里 |
参考
- 数据库升级说明:https://assistance.free.fr/articles/629
- PHP 运行环境说明:https://assistance.free.fr/articles/648
- PHP 被禁用的函数:https://assistance.free.fr/articles/653
- 社区维护的迁移实况,信息比官方新:https://jc-etiemble.pages-perso.free.fr/abc/index.php/trucs-astuces/pagesperso-https
- 空间使用规范:https://les-pages-perso-chez.pages-perso.free.fr/
- 2024 年的旧版指南:https://blog.shiina.fun/2024/05/06/2024年free.fr免费空间的使用/