在 Ubuntu + ThinkPHP 环境下配置伪静态,通常是通过 Nginx 或 Apache 来实现。下面分别说明常见做法(以 ThinkPHP 5 / 6 为例,其他版本思路相同)。
编辑你的站点配置文件(一般在 /etc/nginx/sites-available/ 下):
sudo nano /etc/nginx/sites-available/your_site.conf
server {
listen 80;
server_name yourdomain.com;
root /var/www/your_project/public;
index index.php index.html index.htm;
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
注意:
root要指向public目录- PHP 版本按你实际安装修改
sudo nginx -t
sudo systemctl restart nginx
sudo a2enmod rewrite
sudo systemctl restart apache2
编辑站点配置(如 /etc/apache2/sites-available/000-default.conf):
<VirtualHost *:80>
DocumentRoot /var/www/your_project/public
<Directory /var/www/your_project/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
<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>
在 config/app.php(TP6)或 application/config.php(TP5)中:
'url_rewrite' => true,
TP6 示例:
// config/app.php
'with_route' => true,
✅ 访问 .php 正常但伪静态 404
→ 检查 root 是否指向 public
→ 检查 AllowOverride All(Apache)
✅ Nginx 报 500
→ 查看日志:/var/log/nginx/error.log
✅ 入口文件暴露
→ 确保只暴露 public/index.php
如果你能告诉我:
我可以给你完全对应的一份配置。