通过 apache 的重写功能实现 http 请求不带 .html 后缀的场景

apache 的虚拟主机去除 MultiViews 选项后,不再具备内容协商功能,此时 http 请求资源时省略了文件后缀, apahce 会严格按照请求的 URI 去文件系统中查找对应资源,若不存在则直接返回 404 Not Found

通过 apache 的重写功能可以实现在 http 请求不带 .html 后缀时自动补全,apache 的重写功能由 mod_rewrite 模块实现,启用该模块后即可使用 apache 的重写引擎。

<VirtualHost *:8000>
        DocumentRoot /home/ehigh/work/html/SXGeneralSystemFE/dist
        <Directory /home/ehigh/work/html/SXGeneralSystemFE/dist>
                Options FollowSymLinks MultiViews
                AllowOverride All
                Require all granted

                # 定义重写规则,注意这个重写规则得写在 Directory中
                RewriteEngine On
                RewriteCond %{REQUEST_FILENAME} -f [OR]
                RewriteCond %{REQUEST_FILENAME} -d
                RewriteRule ^ - [L]
                RewriteCond %{REQUEST_FILENAME}.html -f
                RewriteRule ^(.+)$ $1.html [L]
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/generalsystemfe_error.log
        CustomLog ${APACHE_LOG_DIR}/generalsystemfe_access.log combined
</VirtualHost>
  • 如果请求的是一个已存在的文件或目录文件,就什么都不做。
  • 如果请求的路径下存在 .html 后缀的文件,就执行重写,给 Request-URI 的 PATH 部分加上 .html 后缀

posted on 2025-12-15 16:07  一直小爪子  阅读(27)  评论(0)    收藏  举报