Apache服务器配置伪静态,适配各类CMS
伪静态就是把动态URL(带?这类参数)改写成静态形式(如
id=123/123.html),既利于搜索引擎收录,也方便用户记忆。
Apache下实现伪静态主要靠mod_rewrite模块和.htaccess文件。
本文从零开始,带你完成模块开启、规则配置、CMS适配和效果验证,最终目标是让各类CMS在Apache环境下正常使用伪静态链接。
动手前先确认两件事
不是所有Apache都能直接跑伪静态,先确认环境是否就绪。
- Apache已安装且能正常访问:浏览器打开服务器IP或域名,能看到默认页或你的网站首页。
- 网站根目录可写:后续要创建或修改
.htaccess文件,需要对该目录有写权限。 - 确认Apache版本:执行
httpd -v或apache2 -v,记下版本号,不同版本配置文件路径略有差异。
启用mod_rewrite模块
伪静态的核心是mod_rewrite,默认可能没开。
Linux(编译安装或yum/apt安装)
编辑主配置文件,通常位于/etc/httpd/conf/httpd.conf或/etc/apache2/apache2.conf。
找到下面这行,去掉前面的#:
LoadModule rewrite_module modules/mod_rewrite.so
如果找不到这行,说明模块未编译进Apache,需要重新编译或安装对应包。
允许.htaccess生效
在同一个配置文件中,找到网站目录的块,把AllowOverride None改为AllowOverride All:
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
这一步不做,.htaccess里的规则不会生效,是新手最常见的坑。
改完保存,重启Apache:
systemctl restart httpd # CentOS/RHEL
systemctl restart apache2 # Ubuntu/Debian
编写.htaccess伪静态规则
在网站根目录新建或编辑.htaccess文件,写入对应CMS的规则。
WordPress
WordPress后台设置固定链接后,会自动生成规则。
手动添加如下:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
织梦DedeCMS
RewriteEngine On
RewriteBase /
RewriteRule ^plus/list-([0-9]+)\.html$ /plus/list.php?tid=$1
RewriteRule ^plus/list-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /plus/list.php?tid=$1&totalresult=$2&PageNo=$3
RewriteRule ^plus/view-([0-9]+)-([0-9]+)\.html$ /plus/view.php?aid=$1&pageno=$2
Discuz
RewriteEngine On
RewriteBase /
RewriteRule ^forum-([0-9]+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ forum.php?mod=viewthread&tid=$1&extra=page%3D$3&page=$2
规则必须与CMS后台的伪静态设置一致,否则会跳转到错误页面。
常见报错与避坑
配置过程中容易遇到几个典型问题。
- 访问伪静态链接返回404:检查
AllowOverride是否改为All,以及.htaccess文件名是否正确(前面有个点)。 - 规则写了但无效:确认
mod_rewrite已加载,可用httpd -M | grep rewrite查看。 - 中文URL乱码:在
.htaccess顶部加AddDefaultCharset UTF-8,并确保规则中不直接写中文。 - 服务器开了CDN:CDN可能缓存了旧规则,需要刷新缓存后再测试。
验证伪静态是否生效
打开浏览器,访问一个原本带参数的动态链接,如果能自动跳转成静态形式,且页面内容正常显示,说明配置成功。
也可以用命令行快速验证:
curl -I http://你的域名/静态链接.html
返回HTTP/1.1 200 OK即表示正常;
若返回404,回到上一节排查。
关于规则来源的提醒
不同CMS版本和Apache版本的默认规则可能有差异,建议以你所用的CMS官方文档或后台生成的伪静态规则为准。
本文示例适用于常见场景,实际部署时请结合服务器环境微调。
常见疑问
.htaccess文件不生效怎么办?
先确认Apache配置中对应目录的AllowOverride为All,再检查文件权限,通常设为644即可,不要用777。
伪静态和纯静态有什么区别?
伪静态只是URL重写,实际仍由PHP动态生成页面;纯静态是提前生成HTML文件。伪静态配置简单,适合大多数CMS。
多个CMS共用一个Apache怎么办?
每个网站使用独立的虚拟主机配置,并分别设置AllowOverride All,.htaccess文件放在各自网站根目录即可。
如果按上述步骤操作后仍有异常,优先回看“常见报错与避坑”部分,多数问题都能在那里找到原因。