在 Ubuntu 系统下使用 Apache2 开启“伪静态”(即 URL Rewrite 重写),主要通过启用 mod_rewrite 模块并配置 .htaccess 文件来实现。以下是详细步骤:
mod_rewrite 模块Ubuntu 下 Apache 默认可能没有开启重写模块,打开终端并执行:
sudo a2enmod rewrite
如果提示已经启用,则无需重复。
仅仅启用模块还不够,还需要让 Apache 允许通过 .htaccess 文件来覆盖配置(很多新手容易漏掉这一步导致伪静态不生效)。
方法一:修改虚拟主机配置文件(推荐)
编辑你的站点配置文件(例如默认的 /etc/apache2/sites-enabled/000-default.conf 或你的自定义配置文件):
sudo nano /etc/apache2/sites-enabled/000-default.conf
在 <VirtualHost *:80> 标签内,添加或修改 <Directory> 配置:
<VirtualHost *:80>
ServerName yourdomain.com
DocumentRoot /var/www/html
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All # 这里必须改为 All,默认可能是 None
Require all granted
</Directory>
</VirtualHost>
方法二:修改 apache2.conf
如果你是修改全局配置 /etc/apache2/apache2.conf,找到类似下面的代码块:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None # 将 None 改为 All
Require all granted
</Directory>
将 AllowOverride None 改成 AllowOverride All。
使配置生效:
sudo systemctl restart apache2
# 或者使用
sudo service apache2 restart
.htaccess 文件在你的网站根目录(如 /var/www/html)下创建 .htaccess 文件,并写入重写规则。
通用示例(将 index.php?page=123 伪静态为 page/123):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^page/([0-9]+)$ index.php?page=$1 [L]
</IfModule>
常见框架/程序的伪静态规则:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
AllowOverride 是否为 All,以及是否正确重启了 Apache。.htaccess 语法错误,或者服务器没有开启 mod_rewrite(检查 phpinfo() 或 apache2ctl -M | grep rewrite 确认模块已加载)。.htaccess 文件对于 Apache 运行用户(通常是 www-data)有可读权限。index.php 仍然 404:检查 Apache 是否支持并且开启了 AllowOverride 里的 FileInfo 权限(设置 All 即可包含)。按照上述步骤操作,一般就可以顺利在 Ubuntu 的 Apache2 上开启伪静态了。