温馨提示×

ubuntu apache2怎么开启重写

小樊
44
2026-08-27 21:49:42
栏目: 智能运维

在 Ubuntu 上为 Apache2 开启 URL 重写(Rewrite)功能,通常需要完成以下几个步骤:

1. 启用 mod_rewrite 模块

Apache 默认可能没有开启重写模块,你需要使用 a2enmod 命令来启用它:

sudo a2enmod rewrite

如果提示已经启用,可以忽略。

2. 配置允许 .htaccess 覆盖(关键步骤)

仅仅开启模块还不够。默认情况下,Apache 出于安全或性能考虑,不允许在网站目录下的 .htaccess 文件中使用重写规则。你需要修改配置,将 AllowOverride 设置为 All

方法一:修改虚拟主机配置(推荐) 编辑你的站点配置文件(以默认的为例):

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

<VirtualHost *:80> 标签内部,添加如下 <Directory> 配置(假设你的网站根目录是 /var/www/html):

<VirtualHost *:80>
    # 原有配置...
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

方法二:修改主配置文件(如果你想让所有 /var/www 下的站点都允许重写) 编辑 /etc/apache2/apache2.conf

sudo nano /etc/apache2/apache2.conf

找到 <Directory /var/www/> 这一段,把里面的 AllowOverride None 改为 AllowOverride All

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

3. 重启 Apache 服务

修改配置后,必须重启 Apache 才能使配置生效:

sudo systemctl restart apache2

4. 验证重写是否生效(测试)

你可以在网站根目录(例如 /var/www/html)创建一个 .htaccess 文件来测试:

sudo nano /var/www/html/.htaccess

输入以下内容(一个简单的测试规则:访问 domain.com/test 会重定向到 index.php):

RewriteEngine On
RewriteRule ^test$ index.php [L]

然后在浏览器访问 http://你的服务器IP/test,如果页面跳转或显示了 index.php 的内容,说明重写功能已经成功开启。


常用检查命令

  • 检查 rewrite 模块是否已加载:

    apache2ctl -M | grep rewrite
    

    如果输出 rewrite_module (shared),说明模块已加载。

  • 如果修改配置后报错: 可以使用 sudo apache2ctl configtest 检查配置文件语法是否正确。

注意事项

  1. 权限问题:确保 .htaccess 文件对 Apache 进程(通常是 www-data 用户)是可读的。
  2. 如果使用了其他面板(如宝塔等):在面板里通常可以直接通过界面开关“重写规则”或设置“防跨站/AllowOverride”,无需手动改配置文件。
  3. Cloud/Edge 缓存:如果你的网站前面有 CDN(如 Cloudflare),请确认没有在边缘节点缓存了 404 页面,导致看起来重写没生效。

0