使用.htaccess移除PHP后缀时出现403 Forbidden错误求助
解决.htaccess移除PHP后缀时出现403 Forbidden的问题
嘿,我太懂你这个糟心的情况了!当你访问myweb.com/index时出现403错误,核心原因是Apache优先尝试寻找名为index的目录,而不是自动映射到index.php——但你根本没建这个目录,加上服务器默认禁用了目录列表功能,就直接抛出403了。咱们一步步来搞定:
第一步:确认核心前提是否满足
首先得确保两个关键条件没问题:
- mod_rewrite模块已启用:你可以通过phpinfo页面查看(搜索
mod_rewrite),或者在服务器终端执行apache2ctl -M(Linux系统),看输出里有没有rewrite_module (shared)。如果没启用,得先开启它(比如Ubuntu下执行a2enmod rewrite,然后重启Apache)。 - 服务器允许.htaccess生效:检查你的Apache配置文件(比如
httpd.conf或sites-available下的站点配置),确保对应目录的AllowOverride设置为All,而不是None。比如:
修改后记得重启Apache生效。<Directory /var/www/html> AllowOverride All # 其他配置... </Directory>
第二步:替换为正确的.htaccess规则
把你当前的.htaccess内容替换成下面的代码,每一行的作用我都标清楚了:
# 开启URL重写引擎 RewriteEngine On # 设置默认索引页,确保访问根目录或无文件名的路径时直接指向index.php DirectoryIndex index.php # 规则1:如果请求的不是真实存在的文件,也不是真实目录,就自动添加.php后缀 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ $1.php [L] # 规则2(可选但推荐):将带.php的旧URL永久重定向到无后缀版本,避免重复内容 RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] RewriteRule ^ %1 [R=301,L]
第三步:检查.htaccess文件权限
确保你的.htaccess文件权限设置为644(所有者可读可写,组和其他用户只读),权限太高(比如777)可能被服务器拒绝执行,太低则无法读取。
测试验证
做完上面的步骤后,重启Apache,然后访问myweb.com/index——应该就能正常打开index.php了,同时访问myweb.com/otherpage也会自动映射到otherpage.php,带.php的旧链接也会自动跳转到无后缀版本。
内容的提问来源于stack exchange,提问作者what__a__maniac
相关产品推荐
相关产品推荐

