树莓派Web服务器配置.htaccess去除URL后缀出现404问题求解
问题根因说明
从STRATO托管空间迁移到树莓派本地服务器后出现404错误,核心原因是树莓派的Web服务默认未开启重写模块和.htaccess配置支持,和你写的重写规则本身没有直接关联。
你遇到的404错误截图如下:
前置配置检查(Apache服务器适用,大部分树莓派默认部署Apache)
- 启用rewrite重写模块
执行终端命令:sudo a2enmod rewrite sudo systemctl restart apache2 - 开启站点目录的.htaccess支持
编辑Apache默认站点配置文件:
找到对应你网站根目录的sudo nano /etc/apache2/sites-available/000-default.conf<Directory>配置段(默认路径为<Directory /var/www/html>),将其中的AllowOverride None修改为AllowOverride All,修改后示例:
保存退出后重启Apache生效:<Directory /var/www/html> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory>sudo systemctl restart apache2 - 确认.htaccess文件权限正确
执行以下命令设置权限,避免权限不足导致规则不生效,路径替换为你自己的网站根目录路径:sudo chown www-data:www-data /var/www/html/.htaccess sudo chmod 644 /var/www/html/.htaccess
可用的后缀隐藏重写规则
完成前置配置后,使用以下.htaccess配置即可同时实现.html、.php、.htm后缀的隐藏,同时兼容旧带后缀链接自动跳转到无后缀地址:
RewriteEngine On # 带后缀的链接自动跳转到无后缀地址 RewriteCond %{THE_REQUEST} /([^.]+)\.(html|htm|php)\s [NC] RewriteRule ^ /%1 [L,R=301,NC] # 无后缀地址内部映射到对应后缀文件 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f # 优先匹配php文件 RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php [L,NC] # 其次匹配html文件 RewriteCond %{REQUEST_FILENAME}.html -f RewriteRule ^(.*)$ $1.html [L,NC] # 最后匹配htm文件 RewriteCond %{REQUEST_FILENAME}.htm -f RewriteRule ^(.*)$ $1.htm [L,NC]
若使用Nginx服务器的配置方案
如果你树莓派上部署的是Nginx而非Apache,Nginx本身不支持.htaccess文件,需要直接修改Nginx站点配置,在server块中添加以下规则:
# 带后缀链接301跳转至无后缀 rewrite ^(/.*)\.html$ $1 permanent; rewrite ^(/.*)\.php$ $1 permanent; rewrite ^(/.*)\.htm$ $1 permanent; location / { try_files $uri $uri/ $uri.html $uri.php $uri.htm =404; }
修改后重启Nginx生效:
sudo systemctl restart nginx
验证方法
修改完成后清空浏览器缓存,或者使用浏览器隐身窗口访问测试:
- 访问
你的域名/test.html会自动跳转到你的域名/test - 访问
你的域名/test会正常返回对应文件内容,不会出现404
内容的提问来源于stack exchange,提问作者danielkomm
相关产品推荐
相关产品推荐

