在 CentOS 上给 Apache 设置伪静态(URL Rewrite),一般是通过 mod_rewrite 模块实现的。下面按常见场景一步步说明。
httpd -v
# 或
apachectl -v
httpd -M | grep rewrite
如果看到:
rewrite_module (shared)
说明已启用 ✅
如果没有,启用它:
vim /etc/httpd/conf/httpd.conf
找到并取消注释(去掉前面的 #):
LoadModule rewrite_module modules/mod_rewrite.so
然后重启 Apache:
systemctl restart httpd
编辑你的站点配置(以默认站点为例):
vim /etc/httpd/conf/httpd.conf
或(如果你用的是虚拟主机):
vim /etc/httpd/conf.d/你的站点.conf
在 <Directory> 或 <VirtualHost> 中加入:
<Directory "/var/www/html">
AllowOverride All
Require all granted
</Directory>
⚠️ AllowOverride None 会导致伪静态失效
.htaccess 文件进入网站根目录:
cd /var/www/html
创建 .htaccess:
vim .htaccess
RewriteEngine On
RewriteRule ^article/([0-9]+)\.html$ article.php?id=$1 [L]
访问:
http://域名/article/123.html
实际执行:
article.php?id=123
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,L]
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
systemctl restart httpd
.htaccess 是否放在网站根目录AllowOverride All 是否设置Require all granted
检查 .htaccess 语法是否正确
# 重启
systemctl restart httpd
# 开机自启
systemctl enable httpd
# 查看状态
systemctl status httpd
如果你用的是 宝塔 / LNMP / 某个具体程序(如 WordPress、ThinkPHP),可以告诉我,我可以给你针对你环境的精确配置。