Apache虚拟主机自定义.htaccess重写URL出现404错误求助
解决Apache2虚拟主机URL重写404问题
1. 启用mod_rewrite模块
Apache默认可能未开启rewrite模块,先执行以下命令启用并重启服务:
sudo a2enmod rewrite sudo systemctl restart apache2
2. 修改虚拟主机配置,允许.htaccess生效
你的虚拟主机配置缺少目录权限设置,导致.htaccess文件被Apache忽略。修改虚拟主机配置文件(通常路径为/etc/apache2/sites-available/pcts.local.conf),添加<Directory>权限段:
<VirtualHost *:80> ServerName pcts.local ServerAdmin webmaster@localhost DocumentRoot /var/www/repos/pcts # 添加目录权限配置 <Directory /var/www/repos/pcts> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
修改完成后重启Apache服务:
sudo systemctl restart apache2
3. 检查.htaccess文件权限
确保.htaccess文件的所有者和权限符合Apache读取要求:
sudo chown www-data:www-data /var/www/repos/pcts/.htaccess sudo chmod 644 /var/www/repos/pcts/.htaccess
4. 验证重写规则(可选)
如果问题仍存在,可以临时修改.htaccess的RewriteRule,添加[R=302,L]参数测试是否触发重定向:
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.+)$ $1.php [NC,R=302,L]
访问http://pcts.local/contact如果跳转到contact.php,说明规则逻辑正常,再改回原规则去掉R=302即可。
内容的提问来源于stack exchange,提问作者Cobain Ambrose
相关产品推荐
相关产品推荐

