温馨提示×

ubuntu apache2怎样配置伪静态

小樊
40
2026-09-02 05:32:53
栏目: 智能运维

在 Ubuntu 下使用 Apache2 配置“伪静态”(通常是把动态 URL 重写成静态形式,比如 /article/123.html/index.php?a=article&id=123),核心就是使用 mod_rewrite 模块和 .htaccess 或虚拟主机配置。

下面按最常见场景一步步说明。


一、开启 Apache 重写模块

sudo a2enmod rewrite
sudo systemctl restart apache2

确认模块已加载:

apache2ctl -M | grep rewrite

看到 rewrite_module 就说明成功。


二、允许 .htaccess 生效(关键)

Apache 默认可能不允许目录使用 .htaccess

编辑站点配置(示例):

sudo nano /etc/apache2/sites-available/000-default.conf

<VirtualHost *:80> 里加上:

<Directory /var/www/html>
    AllowOverride All
</Directory>

保存后重启:

sudo systemctl restart apache2

⚠️ 如果你用的是其他目录(如 /var/www/your_site),改成对应路径。


三、编写伪静态规则(.htaccess 方式)

在网站根目录创建或编辑:

nano /var/www/html/.htaccess

示例 1:ThinkPHP 风格

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

示例 2:文章伪静态

RewriteEngine On
RewriteRule ^article/([0-9]+)\.html$ article.php?id=$1 [L]

访问:

/article/123.html

实际执行:

/article.php?id=123

四、直接在虚拟主机中配置(推荐生产环境)

不推荐滥用 .htaccess(性能略差),可直接写在配置里:

<VirtualHost *:80>
    DocumentRoot /var/www/html
    <Directory /var/www/html>
        AllowOverride All
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ index.php?$1 [QSA,L]
    </Directory>
</VirtualHost>

然后:

sudo systemctl restart apache2

五、常见错误排查

1. 伪静态不生效

  • 没开 rewrite 模块
  • AllowOverride 不是 All
  • 规则写错或路径不对

2. 500 错误

查看日志:

sudo tail -f /var/log/apache2/error.log

3. 访问真实文件被重写

加判断:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

六、适用框架参考

框架 常见规则
WordPress 默认固定链接
ThinkPHP index.php/ 模式
Laravel public/index.php
自写 PHP 自定义 RewriteRule

如果你能告诉我:

  • ✅ Ubuntu 版本
  • ✅ Apache 版本
  • ✅ 用的是哪个程序(WP / TP / Laravel / 自写)

我可以直接给你可用的完整配置

0