开启 Apache2 的伪静态(URL Rewrite)通常是通过 mod_rewrite 模块来实现的。下面按常见场景给你一个完整步骤(以 Ubuntu / Debian 为例,CentOS 类似)。
sudo a2enmod rewrite
sudo systemctl restart apache2
apache2ctl -M | grep rewrite
看到 rewrite_module 说明已开启。
伪静态 必须允许 .htaccess 或 Directory 中使用 RewriteRule。
编辑你的站点配置文件(如 000-default.conf 或你的域名配置):
sudo nano /etc/apache2/sites-available/000-default.conf
在 <VirtualHost> 中添加或修改:
<Directory /var/www/html>
AllowOverride All
Require all granted
</Directory>
⚠️ 默认是
AllowOverride None,不改成All,伪静态不会生效。
sudo systemctl restart apache2
在网站根目录创建或编辑 .htaccess:
RewriteEngine On
# 示例:将 /article/123 转发到 article.php?id=123
RewriteRule ^article/([0-9]+)$ article.php?id=$1 [L]
✅ 常用规则示例:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,L]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
✅ 检查以下 4 点:
mod_rewrite 是否启用AllowOverride All 是否设置.htaccess 是否在正确目录.htaccess 语法错误访问:
http://你的域名/article/123
如果实际访问的是:
article.php?id=123
✅ 伪静态成功
如果你用的是 宝塔 / LNMP / 某个 CMS(WordPress、ThinkPHP、帝国、织梦),可以告诉我,我可以给你对应环境的精确配置。