部署Web应用配置.htaccess后访问站点报HTTP 403错误如何解决
虚拟主机部署站点返回403错误排查方案
问题场景
首次在虚拟主机部署Web应用时,服务商提供了.htaccess配置文件,当前根目录结构如下:
root | |---project |---public_html |---.htaccess
使用的.htaccess配置内容如下:
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
配置完成后访问站点返回HTTP 403错误,提示服务器或网站配置阻止查看页面。
排查解决步骤
按优先级从高到低依次排查:
- 文件存放路径错误
90%以上的虚拟主机默认站点根目录为public_html目录,Web服务无权限访问public_html上级(即当前root层级)的文件。当前把.htaccess放在root目录、public_html目录为空,同时配置中开启了-Indexes(禁止目录浏览),会直接触发403。
处理方式:将所有对外可访问的文件(包括入口文件index.php、配套的.htaccess)全部移动到public_html目录内。如果项目入口在project/public这类路径下,直接把public目录内的所有内容剪切到public_html即可,不要将整个project文件夹放入public_html。 - 文件权限配置错误
虚拟主机对Web目录权限有强制要求,目录权限不符合规则时会直接返回403。
处理方式:将public_html目录权限设置为755,目录内的php文件权限设置为644,不要给目录设置777权限,多数虚拟主机会拦截权限过高的目录访问。 - 默认首页未配置
当前重写规则仅配置了伪静态转发,未指定默认首页文件,服务端找不到默认加载的首页时也会返回403。
处理方式:在.htaccess的RewriteEngine On行下方新增一行配置:DirectoryIndex index.php index.html - Options配置越权
部分低配虚拟主机不允许用户在.htaccess中自定义Options相关参数,越权配置会直接触发403。
处理方式:临时删除或注释配置中的Options -MultiViews -Indexes行,测试访问是否恢复。如果恢复说明当前主机不支持该配置,目录浏览关闭等功能直接在主机面板操作即可,无需在.htaccess中配置。 - 重写基准路径缺失
重写规则未指定基准路径时,可能找不到入口文件触发403。
处理方式:在RewriteEngine On行下方新增一行配置:
如果站点部署在子目录下,例如RewriteBase /public_html/blog,则改为RewriteBase /blog/。
内容的提问来源于stack exchange,提问作者Rafa Puerto
相关产品推荐
相关产品推荐

