温馨提示×

如何开启Apache2伪静态

小樊
34
2026-07-06 04:09:15
栏目: 编程语言

开启 Apache2 的伪静态(URL Rewrite)通常是通过 mod_rewrite 模块来实现的。下面按常见场景给你一个完整步骤(以 Ubuntu / Debian 为例,CentOS 类似)。


一、确认并开启 mod_rewrite 模块

1️⃣ 启用 rewrite 模块

sudo a2enmod rewrite

2️⃣ 重启 Apache

sudo systemctl restart apache2

3️⃣ 检查模块是否启用

apache2ctl -M | grep rewrite

看到 rewrite_module 说明已开启。


二、修改 Apache 站点配置(关键)

伪静态 必须允许 .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,伪静态不会生效。

重启 Apache

sudo systemctl restart apache2

三、使用 .htaccess 开启伪静态(最常见)

在网站根目录创建或编辑 .htaccess

RewriteEngine On

# 示例:将 /article/123 转发到 article.php?id=123
RewriteRule ^article/([0-9]+)$ article.php?id=$1 [L]

✅ 常用规则示例:

1️⃣ 隐藏 index.php(如 ThinkPHP / Laravel)

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,L]

2️⃣ 强制 HTTPS

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

四、常见问题排查

❓ 伪静态不生效

✅ 检查以下 4 点:

  1. mod_rewrite 是否启用
  2. AllowOverride All 是否设置
  3. .htaccess 是否在正确目录
  4. 是否重启 Apache

❓ 500 错误

  • .htaccess 语法错误
  • 循环重写
  • 未开启 rewrite 模块

五、测试是否成功

访问:

http://你的域名/article/123

如果实际访问的是:

article.php?id=123

✅ 伪静态成功


如果你用的是 宝塔 / LNMP / 某个 CMS(WordPress、ThinkPHP、帝国、织梦),可以告诉我,我可以给你对应环境的精确配置

0