通过 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 后缀
浙公网安备 33010602011771号