在 Ubuntu 下给 Apache 设置伪静态(URL Rewrite),一般是用 mod_rewrite 模块。下面按常见场景一步一步来。
sudo a2enmod rewrite
sudo systemctl restart apache2
确认是否已开启:
apache2ctl -M | grep rewrite
看到 rewrite_module 说明已开启。
编辑你的站点配置,例如:
sudo nano /etc/apache2/sites-available/000-default.conf
在 <VirtualHost *:80> 里加上或修改:
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
⚠️ AllowOverride All 必须设置,否则
.htaccess不生效。
保存后重启 Apache:
sudo systemctl restart apache2
.htaccess 实现伪静态(最常用)在网站根目录(如 /var/www/html)创建或编辑:
nano /var/www/html/.htaccess
index.php?id=1 变成 /1RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)$ index.php?id=$1 [L]
访问:
http://yourdomain.com/1
实际执行:
index.php?id=1
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [QSA,L]
AllowOverride Allsudo tail -f /var/log/apache2/error.log
✅ 原因:
mod_rewriteAllowOverride 不是 All✅ 原因:
| 程序 | 是否需要 .htaccess |
|---|---|
| WordPress | ✅ 默认支持 |
| ThinkPHP | ✅ |
| Laravel | ✅ |
| 原生 PHP | ✅ |
如果你用的是某个框架,可以直接告诉我,我可以给你对应完整配置。
如果你愿意,可以告诉我:
我可以给你精准配置。