如何在VSCode中创建.htaccess文件并实现URL去.html后缀
解决URL去除.html后缀的问题
一、先纠正错误:无需在HTML中关联.htaccess
你用<link rel="htaccess" href="index.htaccess">的做法完全没用,.htaccess是Apache Web服务器的目录级配置文件,服务器会自动识别网站根目录下的.htaccess文件并执行其中规则,根本不需要在HTML页面里引用。
二、在VSCode中正确创建.htaccess文件
- 打开VSCode,进入你的网站根目录
- 点击左侧资源管理器的「新建文件」按钮
- 直接输入文件名
.htaccess(注意开头的点,这是隐藏文件,Linux/macOS下默认隐藏,Windows需要在文件夹选项里开启显示隐藏文件) - 保存后就能写入重写规则了
三、修复重写规则及服务器配置问题
你的规则逻辑没问题,但得先满足服务器的前提条件,同时可以优化规则避免潜在问题:
1. 确保Apache开启重写模块
- Linux系统:执行
sudo a2enmod rewrite启用模块,然后重启Apache:sudo systemctl restart apache2 - Windows(XAMPP/WAMP):打开Apache的
httpd.conf文件,找到#LoadModule rewrite_module modules/mod_rewrite.so,去掉前面的#,重启Apache服务
2. 允许服务器读取.htaccess配置
在Apache的主配置文件(httpd.conf或虚拟主机配置文件)中,找到对应网站目录的Directory块,设置AllowOverride All,示例:
<Directory "/path/to/your/website/folder"> AllowOverride All Require all granted </Directory>
修改完记得重启Apache。
3. 优化后的重写规则
替换你原来的规则为以下内容,能避免循环和错误匹配:
RewriteEngine On # 对外跳转:把带.html的URL永久重定向到不带后缀的版本 RewriteCond %{THE_REQUEST} \s/+(.*?)\.html[\s?] [NC] RewriteRule ^ /%1 [R=301,L,NE] # 内部转发:访问不带后缀的URL时,实际加载对应的.html文件 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.html -f RewriteRule ^(.*)$ $1.html [L]
R=301是永久重定向,对SEO更友好NE防止URL里的特殊字符被转义!-d用来排除目录,避免目录被错误匹配
四、测试验证
- 重启Apache服务器
- 访问原来的
xxx.html页面,应该自动跳转到不带.html的URL - 直接访问不带后缀的URL,能正常加载对应页面内容就说明成功了
内容的提问来源于stack exchange,提问作者M1819JS
相关产品推荐
相关产品推荐

