在 CentOS 上让 Apache 开启伪静态(URL Rewrite),通常步骤如下,适用于 CentOS 7/8 + Apache(httpd)。
httpd -v
# 或
apachectl -v
如果没有安装:
yum install httpd -y
systemctl start httpd
systemctl enable httpd
httpd -M | grep rewrite
看到 rewrite_module 说明已开启。
编辑 Apache 配置文件:
vi /etc/httpd/conf/httpd.conf
确保以下行没有被注释(去掉前面的 #):
LoadModule rewrite_module modules/mod_rewrite.so
Apache 默认可能不允许使用 .htaccess。
找到你的网站目录配置,例如:
<Directory "/var/www/html">
AllowOverride None
</Directory>
改成:
<Directory "/var/www/html">
AllowOverride All
</Directory>
如果是虚拟主机,在
<VirtualHost>里改对应 Directory
systemctl restart httpd
在网站根目录创建 .htaccess:
vi /var/www/html/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,L]
</IfModule>
RewriteEngine On
RewriteRule ^article/([0-9]+)\.html$ article.php?id=$1
如果伪静态不生效,可能是 SELinux 限制:
getenforce
setenforce 0
setsebool -P httpd_can_network_connect 1
访问:
http://你的IP/article/1.html
应能正常重写到 article.php?id=1
AllowOverride 没改.htaccess 语法错误mod_rewrite如果你用的是 CentOS + Nginx 或 某个框架(WordPress / ThinkPHP / Laravel),可以告诉我,我给你对应完整配置。