在 Ubuntu 上使用 Apache2 设置伪静态(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
在网站根目录(如 /var/www/html)创建或编辑:
sudo nano /var/www/html/.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
article/123 伪静态为 article.php?id=123RewriteEngine On
RewriteRule ^article/([0-9]+)$ article.php?id=$1 [L]
访问:
http://yourdomain.com/article/123
也可不写 .htaccess,直接写在 <VirtualHost> 或 <Directory> 里:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
<Directory /var/www/html>
RewriteEngine On
RewriteRule ^news/([0-9]+)$ news.php?id=$1 [L]
</Directory>
</VirtualHost>
AllowOverride All.htaccess 在正确目录sudo tail -f /var/log/apache2/error.log
每个站点都要单独配置 AllowOverride All
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
如果你能告诉我:
我可以直接帮你写完整配置。