Apache URL 解析 - 将 html 文件作为目录提供

Apache URL 解析 - 将 html 文件作为目录提供

我更换了网站托管服务提供商,现在遇到了配置问题:在我的网站根目录中,有一个名为 的文件beta.html。即使以http://example.com/beta或访问,以前的网站托管商上的 Apache 配置也会提供其内容http://example.com/beta/。新网站托管商上的 Apache 将这两种情况视为 404 错误。请注意,beta该站点上命名的目录。

我可以做些什么.htaccess让它在没有客户端重定向的情况下提供 beta.html 的内容?

答案1

MultiViews针对相关内容启用Directory

<Directory /my/web/site>
    Options MultiViews # and your other options
</Directory>

答案2

我的第一个猜测是,你的旧托管服务提供商有 Aapche 的mod_speling启用,这允许 Apache 在显示 404 错误之前纠正轻微的大小写不匹配和/或拼写错误。

最佳做法是将其关闭,因为它可能会造成相当大的开销并且不会阻止糟糕的网页设计。

答案3

您可以使用 mod_rewrite 来执行此操作。网上有很多教程。

然而我要提醒的是,由于冲突、复杂性和 SEO 的原因,这不是推荐的做法。

例如参见:使用 htaccess 重写 .html 文件扩展名 我没有测试过这个但是看到有人使用这个和类似的方法。

请注意,这将影响您的整个网站。如果您只想处理一个 URL,请添加,RewriteCond以便过滤仅适用于该 URI。

# This tag ensures the rewrite module is loaded
<IfModule mod_rewrite.c>
  # enable the rewrite engine
  RewriteEngine On
  # Set your root directory
  RewriteBase /

  # remove the .html extension
  RewriteCond %{THE_REQUEST} ^GET\ (.*)\.html\ HTTP
  RewriteRule (.*)\.html$ $1 [R=301]

  # remove index and reference the directory
  RewriteRule (.*)/index$ $1/ [R=301]

  # remove trailing slash if not a directory
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} /$
  RewriteRule (.*)/ $1 [R=301]

  # forward request to html file, **but don't redirect (bot friendly)**
  RewriteCond %{REQUEST_FILENAME}.html -f
  RewriteCond %{REQUEST_URI} !/$
  RewriteRule (.*) $1\.html [L]
</IfModule>

相关内容