如何使 example.com/about 显示 example.com/about.html?(Apache2)

如何使 example.com/about 显示 example.com/about.html?(Apache2)

当尝试让 example.com/about 显示 example.com/about.html 而不将 URL 更改为 /about.html 时,最好的选择是什么。现在我正在尝试以下代码,它只返回 404 错误。

RewriteRule ^/about$ https://example.com/about.html [R=301,L]

编辑 #1 至威盛我目前已启用多视图,但仍然收到 404 错误。以下是我目前在 VirtualHost 中的设置

<Directory /var/www/public_html>
    Options All +MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>

答案1

而不是使用 mod_rewrite内部重写请求,您可以改用 MultiViews (mod_negotiation):

Options +MultiViews

mod_rewrite 允许您进行更复杂的 URL 重写,但是,如果您所做的只是删除文件扩展名,那么 MultiViews 就足够了 - 这就是它的设计目的。

当您发出请求/about(有效目录中没有扩展名的 URL/文件)时,在启用 MultiViews 的情况下,mod_negotiation 将搜索与预期 mime 类型匹配的文件并将其作为内部请求返回。

更新:

Options All +MultiViews

这不是有效的语法(我假设您使用的是 Apache 2.2,因为在 Apache 2.4 上启动时会出现错误)。如Apache 文档

警告
Options将 a 与 a混合使用+或者将 a 与不带 a 的 混合使用-不是有效语法并且可能会导致意外结果。

为了表达AllMultiViews你需要两个指令:

Options All
Options +MultiViews

All是默认设置(在 Apache 2.2 上),因此这可能不是必需的。但是,最好在单个指令中仅指定所需的选项,例如:

Options FollowSymLinks Includes MultiViews

答案2

你能像这样尝试一下吗:我认为它会起作用

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^about$ https://example.com/about.html [R=301,L]

您还可以使用重定向:

Redirect 301 /about http://example.com/about.html
Redirect 301 /any_dir/about http://example.com/about.html

相关内容